Is learning technology fit for purpose?

In my opinion generally yes ... but are the education systems they support equally optimized? Today's education is focused on administration of learning and as such learning technology inevitably has the similar focus.

It'll be interesting to see One Big Question: a #digped Discussion turns out:

Imagine that no educational technologies had yet been invented — no chalkboards, no clickers, no textbooks, no Learning Management Systems, no Coursera MOOCs. If we could start from scratch, what would we build?

The problem I see with that question is as I recently highlighted:

the tyranny of the present is, it makes it very difficult to think of any change that's not incremental to it  - Alan Kay

I'm personally really looking forward to seeing how the Lawrie Phillips and Donna Lanclos  session goes at #altc this year on Reframing the debate? Learning Technologies part 2 (paper 881 in the programme)

Missed a trick and as Alex Bellars points out should have called it #blideo

David Hopkins recently challenged me to a #blimage and as David explains:

if this is the first time you’ve come across #blimage, here’s a brief summary of what it is. In short, Steve Wheeler (@timbuckteeth), in conversations Amy Burvall (@amyburvall) and Simon Ensor (@sensor63), started the #blimage challenge, which is:

“a confection of Blog-Image. (Yes, we are now in the age of blim!) You send an image or photograph to a colleague with the challenge that they have to write a learning related blog post based on it. Just make sure the images aren’t too rude. The permutations are blimmin’ endless.

David provided a picture of a Lego stormtropper at sunset to #blimage me with. You can’t beat a bit of Lego. My first thoughts weren’t the image or what the image could be interpreted as, but the image as a digital artefact. As a digital image it can be endlessly replicated, distributed, remixed and more. As someone who until the late 90s predominately learned from books, the paper kind, it’s interesting to reflect on how ‘digital’ has changed the way I learn and, in particular, the digital moving image. So in true academic style I’m not going to answer the question set, but answer my own question instead:

what #vidage has influenced my thoughts around education?

Sir Ken Robinson – RSA Animate: Changing Paradigms

With over 13 million views I’m guessing you’ve already seen this but given the tail on these things those new to the sector may have missed. Back in 2010 when I first saw this combination of Sir Ken’s clear passion and the ‘live’ sketchnotes was a powerful combination, planting the seed that education should be better.

Bret Victor – The future of programming

So if you think my first #vidage was clichéd this is hopefully where I win you back. So what does the ‘future of programming’ have to do with education. For this Victor presented the world view of programming à la 1973, highlighting projects from early computer science like Sketchpad, massively parallel processor array and Doug Englebart’s ‘mother of all demos’.  Looking at was achieved in this era you cannot but admire the great creativity and innovation. But how was so much achieved with relatively little? The answer … they were making it up as they went along. There was no defined architecture or notion of the best way to do things. Victor warns the issue now is there is becoming a fixed mindset, a dogmatic approach to computer science that is stifling development. This is where I see parallels to education echoed by Sir Ken’s Changing Paradigms. I’ve embedded the punchline below but encourage you to watch the entire talk.

Alan Kay - The Future Doesn't Have to Be Incremental

Sticking with the computer science theme the last #vidage comes from someone who was part of the 60s vanguard, Alan Kay. Kay has and continues to have a big impact on personal computing and computing science. In Kay’s talk the focus is less on these achievements but on the processes and mindset to achieve this, in particular, dreaming about a future reality, drawing on the past but ignoring the present:

the tyranny of the present is, it makes it very difficult to think of any change that's not incremental to it

This is quite a step change for education but the future reality is worth dreaming about. You can watch Kay’s talk below:

So that’s some of my inspirational #vidage. What’s yours?

tl;dr I recently made a WatchMaker Android Wear watch face based on the ‘squircle’ (download here). This post covers the maths behind squircles and getting (x,y) co-ordinates for any given polar angle. Finally I reveal the secrets of functions in WatchMaker Lau script.

A couple of months ago I started to play with the WatchMaker Watch Face app for Android. This app makes it relatively simple to design your own watch faces for Android Wear. After my first foray in becoming a “watch [face] maker” I’ve gone on to customise other watch faces and also put together R∆D∆R, shown below.


As part of the WatchMaker app there is a Google+ Community which include a ‘request a watch face’ thread. A lot of the time people are just asking for copies of existing ‘real’ watches, which can result in beautiful replicas but don’t interest me much. However recently a request from Andrew Davis came in that intrigued me.

Calls to squircle 


Squircles are apparently the The Hottest Thing In Car Design Right Now and hitting Wikipedia you can find a basic equation to represent the path:

\left( x - a \right)^4 + \left( y - b \right)^4 = r^4

Given Watchmaker uses a Cartesian co-ordinate system with 0,0 at the centre (that is, with a = b = 0) you get Lamé's special quartic. Delving into the recesses of my high schools maths I knew if I solved this equation with that of a line (using tan(ѳ) for a gradient I could get the intercept co-ordinates.


So basically:

y=tan(f)x and y^4+x^4=a^4so


And cue much scribbling and crumpled paper you get…

x=a/(tan(f)^4+1)^(1/4); and y=(a*tan(f))/(tan(f)^4+1)^(1/4);

Putting these equations into a spreadsheet and providing a range of angles gives:

Graphing in a spreadsheet it’s easy to adjust the variables and see the effect. In this case we only have a, the radius of a squircle. And it turns out a is not much to play with e.g. a = 20 and so on.

Wondering if I missed something I hit ‘google’ again and discovered on Wolfram Mathworld that there are ‘two incompatible definitions of the squircle’ (guess wikipedia needs updating), the second by Fernandez Guasti:


with squareness parameter s, where s=0 corresponds to a circle with radius k and s=1 to a square of side length 2k. This curve is actually semialgebraic, as it must be restricted to |x|,|y|≤k to exclude other branches.

Having scraped a solution for the first definition of a squircle I didn’t feel confident that I’d be able to do the same with the Guasti definition. Knowing of the existence of software for solving algebraic systems another ‘googling’ turned up the open source Maxima. So cue much keyboard bashing and head scratching to get:




The nice thing about Maxima is you can copy and paste solved equations directly into a spreadsheet and get them to work with little modification i.e. copying the x output can be pasted as =(k*sqrt(-sqrt(-4*tan(f)^2*s^2 + tan(f)^4 + 2*tan(f)^2 + 1) + tan(f)^2+1))/(sqrt(2)*tan(f)*s). To make your life even either you can use Named Ranges to define the constants. Putting some data in to this Google Sheet I was able to see how the definition of a Guasti Squircle renders, and importantly performs.

Something I wanted to do in Google Sheets, but couldn’t get the charting tools to do was to graph different Squircles with varying k and s values on the same x-y scatter graph, the idea being I could use this as the background image for my watch face, so exported to MS Excel I’ve dropped this file on to OneDrive if you want to have a look):

Squircles in Excel

WatchMaker functions and Lau scripting

WatchMaker makes it easy to add primitive elements to your watch face, and a host of predefined variables you can drop in. In previous faces I’ve designed I’ve dropped these into an element property. For example, rotations based on second, minute, hour hand and other device readings can be used as part of the element properties. Below in an example where I’m using the watch battery charge level expressed as a rotation {br} as the degrees in a radar element.

WatchMaker {br} property

So I could use the formula developed in the spreadsheet for the x, y position of an element using a rotation variable, but given I’ve got three rings and separate x and y values this didn’t seem clever particularly if I wanted to adjust the k and s values. Looking at the WatchMaker developer reference I could see you could define functions that return values, but despite my best efforts every time I tried to call these functions in a property nothing would happen. Trying to find a solution online I drew I blank, my breakthrough was to look at other people’s watches I’d imported into WatchMaker to see how they did it. Doing this I was able to finally work out what the documentation was trying to say … or at least what I think it should say. The solution was to define a set of global variables which are then triggered to update every millisecond or every second in a script file that runs on startup. The variables are then used in the element properties. I’ve included the script below after you can see the finished work, which you can download here.


-- setup some globals
-- var_ms used to prefix on_millisecond variables
var_s_s = 0.85
var_s_k = 230
var_ms_s_x = 0
var_ms_s_y = -var_s_k

-- var_s used to prefix on_second variables
var_m_s = 0.895
var_m_k = 180
var_s_m_x = 0
var_s_m_y = -var_m_k

var_h_s = 0.94
var_h_k = 130
var_s_h_x = 0
var_s_h_y = -var_h_k

-- adaptive layout for circular faces
var_round_face = 0
if ({around}) then
  var_s_s = 0.7
  var_s_k = 187
  var_ms_s_x = 0
  var_ms_s_y = -var_s_k

  var_m_s = 0.71
  var_m_k = 147
  var_s_m_x = 0
  var_s_m_y = -var_m_k

  var_h_s = 0.72
  var_h_k = 100
  var_s_h_x = 0
  var_s_h_y = -var_h_k
  var_round_face = 100

-- things to do each millisecond
function on_millisecond()
  var_ms_s_x = xpos({drss}, var_s_s, var_s_k)
  var_ms_s_y = ypos({drss}, var_s_s, var_s_k)

-- things to do every second
function on_second()
  var_s_m_x = xpos({drm}, var_m_s, var_m_k)
  var_s_m_y = ypos({drm}, var_m_s, var_m_k)
  var_s_h_x = xpos({drh}, var_h_s, var_h_k)
  var_s_h_y = ypos({drh}, var_h_s, var_h_k)

-- function to calc x position
function xpos(a, s, k)
  if (a == 0 or a == 180) then
    return 0
  elseif (a == 90 or a == 270) then
     pos = k
    pos = (k*math.sqrt(-math.sqrt(math.tan(math.rad(a-90))^4-4*s^2*math.tan(math.rad(a-90))^2+2*math.tan(math.rad(a-90))^2+1)+math.tan(math.rad(a-90))^2+1))/(math.sqrt(2)*s*math.tan(math.rad(a-90)))
  if (a>0 and a <90) then
    return -pos
  elseif (a>=90 and a<270) then
    return pos
    return -pos

-- function to calc y position
function ypos(a, s, k)
  if (a == 90 or a == 270) then
    return 0
  elseif (a == 0 or a == 180) then
    pos = k
     pos = (k*math.sqrt(-math.sqrt(math.tan(math.rad(a-90))^4-4*s^2*math.tan(math.rad(a-90))^2+2*math.tan(math.rad(a-90))^2+1)+math.tan(math.rad(a-90))^2+1))/(math.sqrt(2)*s)
 if (a>=0 and a <90) then
    return -pos
  elseif (a>=90 and a<270) then
    return pos
    return -pos

If you've made it this far, thank you :)

When I fly it generally becomes a session in staring into space and letting my mind wonder. It’s not that I haven’t got a long list of Google Apps Script ideas I want to explore, but as a ‘cloud’ based scripting environment a data connection is required (insert pun about in the clouds/above the clouds). For my latest trip I decided to set myself a challenge – create a watch face for Android Wear only using my mobile. This is a lot easier than it sounds thanks to the WatchMaker Watch Face app for Android. Here’s how I got on (or you can just download my watch face)

My watch face on the right displaying the time 9:42 and on the left TokyoFlash Twelve 9-5 B it was inspired by
My watch face on the right displaying the time 9:42 and on the left TokyoFlash Twelve 5-9 B it was inspired by

WatchMaker is one of a number of apps that allows you to do WYSIWYG (what you see is what you get) editing. Making my own watch face was something I started thinking about at the weekend and I’d already scoped out WatchMaker, downloaded some other watch faces and had a peek under the hood. As part of this I discovered WatchMaker integrates with the Lau Programming Language making it possible to do some amazing stuff.

Some of the watch faces I've been playing withAnother great feature of WatchMaker is reuse is baked in. Every watch face you import can be duplicated and customised. This liberal approach makes it easy to see how other people are using WatchMaker features.

As part of my weekend tinkering I’d already taken a picture of my well loved TokyoFlash Twelve 5-9 B watch, shown above. The 1259 B uses LEDs to light up a binary display of the time (see video here), hours shown on the left and minutes equalling the sum of the top (ones) and bottom (tens) rows.

I wasn’t planning on making a watch when I sat down on the plane, but just before the aircraft doors closed grabbed an image of a 1259 B with LEDs on. As I wanted to use a 1259 B LED in my watch the first challenge was cropping the image. I’ve limited image editing apps on my phone but discovered if I successively used the Snapseed cropping tool I could get down to a 16x16px image.

Screenshot_2015-05-19-07-54-15[1] Screenshot_2015-05-19-07-54-09[1]

Adding an image to WatchMaker lets you position the image and appearance using a number of build in WatchMaker variables. For example, {dmo} returns the current minute in the hour in ones. So to progress a minutes led one step from left to right I set the x-position using –90+{dmo}*18. Rotating the hour LED around the bezel was a little more tricky and during the flight my basic trig. maths failed me but the cos/sin rule quickly came back to me once the aircraft doors opened.

There a lot more you can do in WatchMaker with sensor and external data and even animation effects and whilst my first foray in this area is basic it’s mine and my maker journey continues ;)


In July I said:

You may have seen from my colleagues Lorna Campbell (In the meantime…) and Sheila MacNeill (Sideways) that the University of Strathclyde office for Cetis is closing at the end of the month. Things are slightly up in the air right now but we are hopefully the ‘Glasgow based supergroup’ will reform soon.

Unfortunately after inconsolable differences, Sheila getting a job at GCU ;) and my pursuit of a solo career, the reformation of the supergroup is on hold for the foreseeable future. When I started at Cetis I described it as the dream job and that it was largely that, although it got a little nightmarish towards the end. It was particularly a great joy and pleasure to work closely with Sheila, Lorna and Phil (not forgetting Cetis Comms team).

In the meantime I’ve been getting stuck in to other work:

  • Association for Learning Technology (ALT) – this is in part a continuation of the work I did for the ALT-C conference platform (notes here), which was described by Stephen Downes as a ‘masterwork’, amongst other things looking at how ALT can continue to support it’s member community;
  • The Open University (Open Educational Resources Research Hub) – have contracted me to develop a pilot evidence collection and display site. As part of this there is a strong data visualisation aspect which I’m looking forward to;

and finally  

  • ████ █████ (█████) – have contracted me to ███ █████ of their █████ ████ to see if ████ can be used to █████, which I am very █████ about.

There are potentially some other this in the works which I’ll mention when/if I can.


I’m a self-confessed RSS junkie, I ❤ RSS, so when topping up my feeds I wanted a quick way to add to Feedly (my current RSS reader of choice). I already use the Chrome RSS Subscription Extension (by Google) which gives me a handy icon in my address bar when a feed is detected.

RSS Subscription Extension (by Google)

Unfortunately though it doesn’t have Feedly as a service …

Manage feeds

Clicking on ‘Manage…’ gives the rather daunting

Edit feed reader dialog

A quick search for a Feedly specific url turned up Add Feedly to Firefox's Feed Handlers List and I recognised that the browser.contentHandlers.types.#.uri would do the trick. So using the following in the Edit feed reader dialog:

I back to my feed munching ways


Recently I gleefully exclaimed on Twitter “exciting news” and despite the interest I didn’t feel until now that I could reveal what had happened, Google were looking for a hire … Google were looking to hire me:

Hi Martin,
I am a technical recruiter within Developer Relations at Google and I wanted to get in touch. Based on your background and postings, I feel you could be a great fit, as we are hiring for multiple positions within Developer Relations in NYC and Mountain View, CA locations specifically. Are you currently entertaining new opportunities? If so, I would like to get in touch at your earliest convenience to discuss your background and active opportunities. Looking forward to hearing back!

Ah finally the 100+ blog posts I’ve written on Google, countless presentations on hacking stuff together with Google Spreadsheets (a couple here) and I finally got noticed.  What was most interesting about this message came from … LinkedIn!!!

Yes that’s right despite having a decent presence of Google+ it appears Google do some of their recruiting through someone else's social network. This initially led me to question if it was a genuine approach or just some recruiting agent phishing for CVs spoofing a Google connection. The only thing that gave comfort was the inclusion in the message of the sender’s @google.com email address and I opted to reply via this instead. Still though LinkedIn! Why not Google+ or even Gmail. If Google are looking for hires through LinkedIn that’s a pretty big argument to make sure your graduates have a presence there … right?.

Fortunately the message wasn’t a phish and the recruiter got back to me and we arranged a phone call. The call was primarily a chance for the recruiter to find out if I was suitable to be put forward for one of the posts and included the basics: what programming languages do you use, experience of public speaking etc. As I later found out the recruiter is essentially your handler, making sure you are aware of the next steps, providing a friendly interface to what can be a daunting experience. At this point the expectation of getting a job in developer relations began to slip. As someone who prides themselves on being a hacker, often even using ‘I’m not a developer’ in my introduction - primarily because I’m often talking to novices and I want to make a connection with the audience - my lack of formal IT qualification and experience was going to be a handicap, but this is Google they pride themselves on innovation … right?

Regardless of this the recruiter saw enough to put me through to the next phase which was a 45 minute call with a Google software developer (not HR person, Google use employees to benchmark candidates), which was a mixture of ‘why do you want to work for Google? … hmmm you called me’ and a programming problem to solve. I’m not sure if part of me wanted to sabotage my opportunity but I completely tanked at this. This left me feeling both angry and disappointed. I was mainly angry for pretending to be something I’m not … a software developer. I’m a hacker, an innovator, a scamp, a scallywag. I betrayed my original calling as a Structural Engineer long ago to search of the next novelty, the next shiny thing to play with, the next idea to stretch until it breaks. No I’m not a software developer.  And thankfully Google agreed, which I sure comes as a relief for a number of people in this sector … right?

The recent news that LinkedIn has dropped their minimum age to 13 to entice school kids has extra resonance for me because now I know even Google use it for recruitment. It reassuring to know people like Sue Beckingham, Matt Lingard and others recognise the importance of students having an awareness of LinkedIn.

So folks I‘m afraid you're stuck with me ;)

Some things I learned along the way

Peer Interview: Martin Hawksey on Networked ResearcherI was recently asked by Ernesto Priego if I’d like to do an interview for Networked Researcher. I’ve been an admirer of Ernesto’s work (I can even tell you the day I became aware of him 22nd September 2011. He was tweeting from the #studentexp event organised by @GdnHigherEd. If you’d like to see what he said it’s always been the default graph on TAGSExplorer ;), so it was an honour to be asked.

I inhabit a weird world where I no longer know what I do is classified as so I’m not sure I’d call myself a researcher in a traditional sense, but it was great to have the opportunity to share what I do and acknowledge some of the people who have influenced/inspired me along the way.

Here’s the Peer Interview: Martin Hawksey on Networked Researcher


What is the difference between a map and a compass? he [Ade Oshineye] asked. His answer: people have too much faith in maps, which are, in the end, just someone else's view of the world. Whereas a compass only gives you a rough direction and we don't expect more of it than that.

The point? It's the same with finding a successful model for ... the future: getting the direction right is better than trying to find the perfect strategy with the false certainty of a map.

... Even bookshelves, he said, have evolved over years: boring technology may have the answer to your problem.

Google+ Hangouts, he said, is an example of boring technology - video chat - being used in a new way. ...

Google+ has taught him that if you apply boring technology to interesting people you can get something new: "The hard part is coming up with the right metrics to see if you're getting there." - Charles Miller, Future media challenges are about finding compasses not maps (Emphasis mine)

We've Moved
We've Moved
Originally uploaded by bredgur

So JISC RSC Scotland North & East (who I currently work for) is no more after July this year (JISC RSC Scotland South & West won the recent re-tender to take on the whole of Scotland). This means it makes sense for me to start flicking switches, turning dials and shift the flow from http://rsc-ne-scotland.org.uk/mashe to my new home https://mashe.hawksey.info. (I thought best to move now rather than later in the hope that the Googles’ of this world get a chance to see I’ve moved rather than completely disappeared.)

To help this along in packing my bags I’ve left the proverbial “we’ve moved to”, which should automatically redirect most of my old traffic. I left a couple of the toys behind though, namely iTitle and uTitle. With Twitter’s recent enforcement of Terms of Service I felt there was too much liability in having them sit on a server I’ve responsibility for. I am however trying to find another official home for these so if anyone is interested get in touch.

How did the move go? Reasonably well. Biggest disappointment was I couldn’t let Google Webmaster Tools know about the shift because I’d registered the old JISC RSC MASHe with a subdomain (ended up needing to registered a new account). Google CSE was better, just a case editing the sites in my existing control panel, no code editing my end. Google Analytics required to register a new account but iIt was easy to change the tracking code on the blog as I use a plugin for that. Redirecting the RSS feed to here was easy as all I needed to do was edit the source in Google Feedburner. Am I missing any Google products :-s

With my blogs future secured what about me? Everyone’s post is redundant, so we’ve the joys of job matching. It looks more favourable for the existing RSC staff in Glasgow as the new posts have been written for them, as for us east coasters with only 2 posts available 6 are going to be disappointed (needless to say if you hear of any jobs going for an educational technology chancer pioneer drop us a line ;)

With any move there is a risk of something getting broke so if you find anything damaged let me know ;)