Thinking outside the box quote

Reflections on employability and higher education

Thinking outside the box quote

Photo by: kaboompics.

I’ve been reflecting for a few weeks on the ‘Employability, entrepreneurship and the future of Higher Education‘ post by Mark Drechsler on his blog. There is one main point that I keep come back to in my reflections.

I’m not convinced that I want higher education institutions teaching students to be ‘work ready’. In my reflections, I’ve defined ‘work ready’ as meeting the selection criteria as outlined in job advertisements. For that is the most visible indicator of what their requirements are. The ones I’ve seen lately, in my area of software engineering / development, are very specific.

Not only are employers looking for prospective employees with experience in specific languages, they want experience in specific frameworks. For example it isn’t enough to have experience with PHP, a candidate must also have experience in Laravel. Or alternatively it isn’t sufficient to have experience in JavaScript, a candidate must have experience in AngularJS.

The other type of listing includes such a wide array of technologies and skills, that I don’t believe anyone has them. Either way, my concern is that these are lists of very specific skills.

I don’t think higher education institutions, universities, should be in the business of imparting such specific skills and knowledge to students. Rather, they should be teaching higher order skills, so that they can learn these types of specific skills. More importantly they need to be prepared for a lifetime of learning these types of skills.

For the past two years I’ve been working on Moodle at Blackboard. I was fortunate that the managers at Blackboard valued my years of experience in the higher education sector, over my lack of direct Moodle experience.

During this time I’ve used all of my experience and skills in understanding the Moodle code base, and delivering value to clients. As a software engineer the ‘soft skills’, such as communication and time management, are just as important as the technical skills. I’d also argue that for some positions, such as client development, the soft skills are even more important than the technical ones.

My point from all of this reflection and rambling, is this:

In my mind, someone working in information technology who has the capability to learn and build on their experiences including their softer skills, is more valuable to an organisation than one who has experience in a narrow skill set.

Exploring Vagrant and Chef for Testing Moodle with PostgreSQL

Elephant Statue

Elephant statue.
Photo by: byronv2.

As part of my work as a software engineer at Moodlerooms, part of Blackboard, I work on a variety of different tasks. Today I had to work on an issue that related to an SQL query used by a Moodle plugin that works fine in MySQL, and was reported to be broken in PostgreSQL. Unfortunately the version of PostgreSQL that was being used was not reported. To fully investigate the issue, I needed to test the SQL query against all of the supported versions of PostgreSQL that can be used with Moodle 2.8.

I’ve been exploring the use of virtual machines for development lately. For my day to day tasks on the Moodlerooms platform, I use an Ubuntu based virtual machine, hosted by VirtualBox, that is managed by Vagrant and Chef. All of the team use this same setup. It ensures that we are all starting from a common platform.

For those not familiar with the tools:

  • VirtualBox is software that supports the creation and management of virtual machines.
  • Vagrant is a tool used to help mange virtual machines.
  • Chef is a tool used to automatically configure the virtual machine managed by Vagrant.

Using Vagrant and Chef I was able to setup a relatively simple virtual machine that ran a PostgreSQL database server. I was then able to connect the instance of Moodle in my development virtual machine, with the other virtual machine that was running a PostgreSQL server. Using Chef I was then able to change the version of PostgreSQL, while retaining the rest of the configuration as exactly the same.

The basic workflow was:

  1. Configure my Moodle development virtual machine to use to the database on the PostgreSQL virtual machine.
  2. Install the Moodle database.
  3. Test the required functionality.
  4. Destroy the PostgreSQL virtual machine.
  5. Provision the PostgreSQL virtual machine with a different version of PostgreSQL.
  6. Repeat steps 2 – 5 as often as I needed.

That’s the nice thing about Vagrant, it makes it easy to create and destroy virtual machines. Using Chef makes it easy to ensure the virtual machine is configured exactly the same each time it is created. In this way it was easy to have a PostgreSQL database server that is exactly the same, except for the version of PostgreSQL of course.

Using virtual machines make it easy to test this type of issue. It’s a technique I look forward to using again.

An Easy Way to Log MySQL Queries

SQL Humor

SQL Humor
By: Travis Warren.

Earlier today I was working on an issue reported by one of our Moodlerooms clients. It was related to a plugin in Moodle that makes extensive use of SQL queries to render a table of data.

Moodle, like many large web applications, has a database abstraction layer. This makes it easy to use a variety of different databases with Moodle. In my time using Moodle I’ve used PostgreSQL and more recently MySQL. One of the downsides of using a database abstraction layer is that it can make it difficult to see the exact SQL that is sent to the server. Which is what I needed to do today.

The development environment that I’m using is based on Vagrant and uses, an Ubuntu operating system and MySQL version 5.6. So these instructions may be need to be adapted to your particular environment.

To enable query logging,  I needed to login as the root database user, and execute the following commands in a MySQL console:

The first command shows the log file location, and that logging is currently turned off. The second command turns logging on.

I was then able to run the action in Moodle to generate a list of SQL queries. Using the file, and using grep to go through all of the queries, I was able to find the one that was of interest to me. This gave me the insight I needed to resolve the problem.

Turning logging back off is as easy as running this command in a MySQL console:

I’m noting this trick here, mainly as a reminder to myself. If you stumble across this post via an Internet search, I hope it proves useful.

Two Very Useful WordPress Development Resources

Yesterday I wrote a brief post about my new plugin for WordPress called Techxplorer’s Plugin Listicle. One thing I forgot to mention were the three resources that helped me the most in developing the plugin.

The first is the WordPress Plugin Handbook. It was super easy to find the documentation that I needed in how to write the plugin. A related resource was the Code Reference. Using this site it was easy to search for the right functions to use, and see what parameters they needed and what was returned. Much easier than using grep to search through source code to find the function definition.

Both resources put other open source projects to shame. These should be held as examples of the right way to document an open source code base. The contributors to both projects should be very proud of their achievement.

The second is VCCW, development environment. I’ve successfully used Vagrant based virtual machines for my Moodle development as part of my job. The VCCW development environment is also Vagrant based, and was super easy to setup and use. It made developing my plugin, and tweaking another plugin, very easy.

Techxplorer’s Plugin Listicle

Yesterday I wrote my first WordPress plugin in many years. In fact, thinking about it, this is the first WordPress plugin that I’ve written since I wrote some custom plugins for the folks over at Libraries Interact. Those plugins even became the topic of a chapter for a book.

If I remember correctly, at the time I was writing plugins for version 2.x of WordPress. Given that WordPress 4.3 is soon to be released, it must be many years. It seems like a life time ago. I doubt this new little plugin will have such exposure.

I called my new plugin Techxplorer’s Plugin Listicle, and it is available on GitHub right now. The purpose of the plugin is to automatically create a list of activated plugins in a WordPress site. For example, it powers this page on my site.

I wrote the plugin because it occurred to me that both WordPress and the theme author are promoted via links in the site footer. Yet there was no way that I could easily give credit to the authors of the plugins that I use. I think this is important, because these plugins extend the core WordPress functionality in ways that make my site possible. Credit should be given where credit is due.

I have made a deliberate decision not to list the plugin in the WordPress plugin directory. This is because the plugin developer community is a vibrant space. At this current moment in time I have neither the time, nor resources, to participate in it. I respect the community, and didn’t want to create a plugin page that appeared languished and was not looked after. Simply because I can’t dedicate the time necessary to promote and support a plugin.

At the same time, I feel strongly that the code that I write should be released as open source. As such, listing the plugin on my GitHub page is a satisfactory compromise.

If you use the plugin and find it useful, please let me know.

What is effective assessment in a MOOC?

Le Penseur. The Thinker.

Le Penseur. The Thinker.
By: Sigfrid Lundberg.

Recently I completed my first Massive Open Online Course (MOOC). Which one is not relevant to this post, as I don’t intend this to be a review of the specific course. After completing the course, I started to reflect on the way assessment was used. These reflections led me to the conclusion that I don’t believe it was particularly effective. This conclusion was quickly followed by another, I do not know what the alternatives are.

Let me explain…

The course was structured around six weeks of video based content. Each week also included three different types of assessment; a wiki, a discussion forum and a quiz. I will explore my reflections on each of these assessment types below.

Wikis: A search for more information

The wiki was used to encourage the students to search out more information related to the content presented that week. For example, additional references, the organisations mentioned, the reports mentioned, or definitions of key terms.

The Wiki used Markdown, a popular lightweight markup language. One that I’ve used off an on for a number of years. Indeed, my honours thesis was written using Markdown, and transformed into a PDF using the MultiMarkdown application.

The trouble with the wikis is that they became a dumping ground for copy and pasted content. I consider Markdown to be an easy to understand and easy to use markup language. I will acknowledge that I may be biased in that opinion, especially as I’m very familiar with it. The basics are still very easy to understand and use.

The wiki contained many formatting errors. Such as missing headings, links that were formatted incorrectly, and other irritating little things. A few weeks into the course there was an attempt to at least have the students alphabetise their entries. Unfortunately, by then the bad habits had already formed.

The biggest problem was that with 100’s of students all contributing content a wiki quickly became an impenetrable wall of text. Any grains of good information were quickly lost in the piles of chaff.

Discussion forums: A prompt for reflection

The intention, as I perceived it, of the discussion forums was to act as a prompt for reflection and hopefully critical thinking. Each week the lead-in for the forum was a question and some more information for consideration. There was also an entreaty to reply to at least one of the other students posts.

Once again the primary problem was one of scale. With 100’s of students posting in the forum the list of posts quickly became exceptionally long. As a student it was dispiriting to try to come up with something new and original. It was also led to feelings that it was very unlikely that anyone would read your individual post.

Quizzes: Checking your level of knowledge

Each week included a quiz of 10 to 15 questions. They were predominantly multiple choice or true / false questions. Each question had provision for a set number of attempts. This allowed you, as a student, to take a guess if you weren’t sure. In the knowledge that you had at least one more attempt. Except, of course, the true / false questions which only allowed one attempt (for obvious reasons).

The primary issue for me with the quizzes is that I’m not convinced that multiple choice questions are effective in evaluating student knowledge. There were no essay, or even short answer questions. As such the quiz becomes a simple mechanism to see if a student could recall facts.

The question in my mind is, does the ability to recall facts show understanding? Or does it just reflect on your ability to remember things?

Lots of questions, no answers…

The end result of my reflections is that I have lots of questions, and no real answers. I believe that the root of the problem is scale. That is, a MOOC is massive and as such is designed to cater to as many students as possible. A MOOC is also free, or at the very least available at low cost. Therefore any assessment primarily needs to:

  • Be available online, after all that is one of the words in the acronym.
  • Cater to as large a number of students as possible.
  • Work with as little investment in time and money as possible.

The end result, at least in my experience, is assessment that is not very effective. I am willing to preemptively agree that a sample size of one is not in any way a sufficient sample size. It has given me food for thought. Perhaps a MOOC isn’t meant to provide in-depth understanding. Is it only meant to provide an overview of a topic, as a means of wetting a students appetite for further investigation and learning. Or if I was to be extremely cynical, is the purpose of a MOO more of a marketing exercise intended as a way to try to recruit more students to the sponsoring institution?

These reflections have got me asking many questions, and I would very much like to explore them further. I’ll also be thinking about them before I sign up for my next MOOC.

Adelaide International Kite Festival

Below are a number of photos that I took a few months ago, at the Adelaide International Kite Festival at Semaphore. The photos were taken on the Easter long weekend this year, and I’ve only found the time to sift through the 300 photos I took to find the best ones.

Gundam G-Self HG Model

Below are some pictures of the second Gundam model that I have ever assembled, the Gundam G-Self. My thanks to rurisu_hoshino for introducing me to the world of Gunpla and Gundam models.

On Safari with Inline SVG

Pillar of Darkness Expedition: 1913

“Pillar of Darkness Expedition: 1913”. Uploaded by: davidd.

At the start of this month I announced on Twitter that I had made the transition from working in the client development team at NetSpot, to working in the product development team at Moodlerooms. Both companies are owned by Blackboard. I still work on adding features, and fixing bugs, with software built on Moodle. My focus is now on features that are part of our core products, rather than client driven customisations. I also still work on defect resolution, also known as fixing software bugs.

One of the more interesting defects I’ve needed to resolve in the past few weeks, related to the new Snap theme, the use of inline Scalable Vector Graphics (SVG), and the Safari web browser.

Using SVG is important as it allows our designers and developers to use icons and other page elements that scale to different display sizes and resolutions, without any loss of quality. Additionally as SVG is a text based format, a SVG file will often be smaller than a graphics file. Especially if there is a need to create multiple images for different screen resolutions.

As SVG is a text format, it is possible to embed the SVG code directly into the HTML markup of the page. This also helps speed up page download times as the HTML of the page, and the SVG code required to render elements of the page, can be downloaded in the same request.

The defect that I needed to work on relates to the way that the Safari web browser renders inline SVG. After a fair amount of debugging, and googling, I discovered that Safari, at least at the time of writing, cannot render inline SVG if the SVG code comes after the place in the page where it is used.

For example this will not work in Safari (abbreviated code for readability):

The inline SVG code starts with the svg tag on line 10 in the code listing above. This is where the SVG content is defined and contains the code necessary to render the icon.

The icon is meant to be displayed by the svg tag starting on line 4. The intent of the xlink:href attribute is to define where the SVG code is located in the page as defined by the id attribute on the g tag on line 11.

In my testing the icons would display correct in all browsers except Safari. To get Safari to render the content correctly, I needed to move the SVG code so that it appeared in the page before it was used. For example this will work in Safari.

All I needed to was move the SVG from the end of the section element to the start of the section element. Now Safari is able to following the id in the xlink:href attribute and display the appropriate icon.

The takeaway thought from all of this is, that while it may be tempting to put the SVG code to the bottom of our HTML file, or at the bottom of the enclosing element, this will mean that in the Safari browser the page won’t render correctly. It is preferable to put the SVG code at the start of the main enclosing element. This will ensure cross browser compatibility.


Shy Birds Breakfasting in North Adelaide

On my way into work earlier this month, I cam across these two shy birds having breakfast in the parklands.

Unfortunately they were too shy for any close up photos.