Reflections on volunteering to help at graduations

Two doctors at the empty graduation desk.
Two doctors at the empty graduation desk.

Last Friday I had the privilege to volunteer and help with two graduation ceremonies at Flinders University. I’ve been to three graduation ceremonies, as a graduand, this was the first time I was at a graduation ceremony as a staff member.

As someone with an introverted personality, I tend to avoid social situations, especially those with large crowds. I’m terrible at small talk and chit chat. I have no idea what to say.

However when the invitation to volunteer to help at the graduation ceremonies came out I jumped at the chance. This is because I’ve realised that I’m at a point in my career where I need to grow my professional network. I felt that volunteering would be a small, but significant step towards this goal.

I’m so glad that I got over my trepidation that morning and went up to the registration desk for the first ceremony of the day. There were so many happy, excited and nervous people. Young and old, from all walks of life. I couldn’t help but be swept up in the excitement.

Working on the registration desk is a critical part of the preparation of the ceremony. This is because we check off the graduands who have arrived for the ceremony and give them their seat numbers. It is critical that they sit in their allocated seat, so that they are in the right order for when their name is called to cross the stage and receive their parchment.

Having graduands out of order is a nightmare scenario. It would be embarrassing for us, the graduand, and the academics on stage. We take many precautions to ensure this doesn’t happen, and it starts with the registration desk.

It’s critical to be accurate and make sure the graduands know how important it is. I keenly felt the pressure to be accurate, and yet fast, to ensure everyone could register in a timely fashion.

The time flew by and there were many happy people. It took the pressure off, and it was with a sense of accomplishment that I crossed off the last name and handed over the last seat number sticker.

For the second ceremony I was stationed out the front of the registration tent. I had to ask each graduand which degree they were graduating from that day, to ensure they went to the right registration desk. I believe I spoke to more people that day than I have in months.

It was exhilarating to help people get to the right registration desk, answer questions, and generally try to be as useful as possible. One of the many highlights was helping a family by taking some photos of their group, making sure they could all be in the photo together. They all had smiles on their faces, and I couldn’t help but smile back.

Reflecting on my experiences over the weekend , I became convinced that sometimes it is good to get out of my shell and experience new things. It also gave me an appreciation for what my friend Mark Drechsler went through at the start of semester at Flinders Connect. I had to interact with lots of people for one day, and it left me exhausted. I have no idea how he did it at the start of semester with many more people each day for two whole weeks.

This is a long way of saying that volunteering not only helped the graduations team, it was a growth opportunity for me. I look forward volunteering again next time.


Techxplorer’s Anime list – Version 1.1.0

Illustration by: Willian Yuki Fujii Memmo.
Illustration by: Willian Yuki Fujii Memmo.

Tonight I am really pleased to be able to release version 1.1.0 of the Techxplorer’s Anime List plugin for WordPress.

For those that may not be familiar with the plugin, it allows users of WordPress to display a list of the anime that that they’re currently watching. It does this, by integrating with the Hummingbird platform and using the list of titles in the ‘Currently Watching’ section of a users library.

There are two new features in this version:

  • A new widget allows users to display a list of anime titles in the sidebar
  • The alternate title can be displayed below the canonical title in the list of anime

You can see the plugin in action on my site. More information about the plugin is also available on the plugin page in the WordPress plugin directory.

As always, I hope that this plugin proves useful. If you like using the plugin please let me know. If you notice a bug, or have a feature request, please create an issue.

New WordPress plugin: Techxplorer’s Anime List

Super War RobotBy: Ragakawaw.
Super War Robot
By: Ragakawaw.

This evening I’m really excited to announce the release of a new plugin for the WordPress plugin that I’ve developed. The plugin is called Techxplorer’s Anime List, and it is designed to display a list of the anime that you’re currently watching.

It does this by integrating with Hummingbird and replacing a shortcode in a post or page with the list of anime in the ‘Currently Watching’ section of your library.

At the moment there is no widget support, so you can’t display this list in your sidebar. Widget support is a planned future feature.

As always I’m releasing this plugin in the hope that it proves useful. If you use the plugin and have feedback please let me know.

Techxplorer’s Plugin Listicle – Version 2.1.1

This evening I released version 2.1.1 of the Techxplorer’s Plugin Listicle plugin for WordPress.

The main feature of this version of the plugin is the addition of plugin icons to the listicle. Below is a screen capture of what the new list looks like.

Screenshot of the listicle with plugin icons
The new listicle with plugin icons

There is a setting that can be enabled which displays the list in this new format. Additionally some basic CSS is also added to the page, or post, by the plugin. If you implement your own CSS to style the list, it is possible to disable the plugin CSS to make customisation easier.

You can see the plugin in action on my own plugins page.

As always I hope that this plugin proves useful. If you have any suggestions for features, or wish to report a bug, please do so at the GitHub repository for the plugin.

Techxplorer’s Plugin Listicle v2.0.0

Image by: Benjamin Nelan.
Image by: Benjamin Nelan.

I’m very excited to announce that version 2.0.0 of the Techxplorer’s Plugin Listicle is live and now hosted on the plugin directory.

In July 2015 I wrote a short blog post about the first version of my plugin Techxplorer’s Plugin Listicle for WordPress.

At the time I hosted the very small plugin on GitHub and said in the post announcing the plugin:

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.

That was a long time ago, and many things have changed. In particular I’m now working as a business analyst at Flinders University. This means I don’t write as much programming code as I used to, and I found I was missing developing software a bit.

I kept thinking about the plugin languishing in its little repository on GitHub, and knew that it could do more.

Over the last few weeks I’ve been working on re-learning WordPress development, with a particular focus on more complex plugins. I’ve re-written the plugin and I’m pleased to say that version 2.0.0 of the plugin has been accepted for hosting on

The plugin is now officially available here. I have some plans for future development, and they’re listed as issues in the GitHub repository attached to the 2.0.0 Milestone.

If you use the plugin, and find it useful, please get in contact and let me know. If you have any feature requests, or bug reports, please let me know via the GitHub repository.


The story behind John Smith at Flinders

A collage of some of the first john smith photos
A collage of some of the first john smith photos

As you may already know, I work as a business analyst at Flinders University. The main campus is a really nice place to work, and there are lots of walking paths to provide some exercise at lunch time. Which is fortunate because, like many office workers, I need to get out and walk more.

Sometimes it can be hard to find the motivation to go for a walk, especially when the pressure of a deadline is looming. With this in mind, I wanted to add something extra to my walks.

I also have an interest in photography, and a burgeoning interest in social media. So the other day I reactivated my Instagram account. I also found a little figurine of the Tenth Doctor from Dr Who. I wanted to avoid any trademark related issues, so I use the tag ‘johnsmith’ for the photos. In reference to one of the many pseudonyms that The Doctor has used over the years.

Taking photos of the little guy around the Flinders University campus adds something to my walks, and puts a smile on my face. It also opens my eyes to things around campus that I may not have seen before, as I’m always on the lookout for a potentially good shot.

The photos are posted to my Instagram account. An IFTTT recipe automatically makes a post here on my website, and the JetPack sends that post to all of my other social media accounts.

I hope others find my photos interesting.

Using watchman to automatically push commits to a git repository

Photo by: House of Geekdom.
Photo by: House of Geekdom.

As I mentioned in an earlier post, now that I’m working as a business analyst at Flinders University I don’t do as much development as I used to. I’m still keeping busy with the development of a new web app, which I hope to write more about soon.

A large part of my job is writing SQL queries that are run either in an Oracle or MariaDB database. Some of the queries, especially those run in the Oracle database, can be quite epic in terms of size and complexity.

For this reason I needed a way, with as least amount of input from me as possible, to keep a history of each SQL script. So that as the script was developed I could easily go back to a previous version if I needed to.

Additionally I use OS X as my primary workstation, but I need to be able to quickly and easily access the SQL scripts that I develop on my secondary Windows workstation as well. As such, I needed a way to manage line endings in a sensible fashion between to the two platforms.

For these reasons I developed a solution that is based on Watchman and a Git repository hosted on Bitbucket. Although any Git hosting provider, including self hosting, would work just as well.

Installing Watchman is easy using Homebrew, my package manager of choice on OS X, and I had it up and running really quickly.

I then created a Git repository for my SQL scripts which used a repository hosted on Bitbucket as a remote.

To manage the the process of committing changes to the repository I wrote the following short and simple shell script.

I am not the best shell script programmer, and I’m sure this script could be improved upon to make it more elegant and fault tolerant. But at the moment it is doing the job.

What it essentially does is pull down any new changes, which will be very rare, adds new local changes, commits them and then pushes the change up to Bitbucket.

The last line of the script shows a notification so I know that the process worked. This is important as I don’t want the process to fail silently. Seeing a brief notification when the process completes helps in knowing everything is OK.

The last piece of the puzzle was to get Watchman to automatically call my script when changes to the SQL files had been detected. I configured a trigger in Watchman using a command like this:

watchman -- trigger /full/path/to/the/repo autoupdate '*.sql' -- full/path/to/the/rep/

What this command essentially does is add a new trigger called ‘autoupdate’ which monitors for changes to ‘*.sql’ files in the repository. When a change is detected the shell script from earlier is called.

In this way, each time I save my SQL file, which I do habitually just prior to running them, a new version of the file is automatically added to the repository and pushed up to the server.

This not only gives me a full history of any changes, it also gives me a backup copy. Additionally when I need to use the SQL file on my Windows workstation, all I need to do is pull the new changes down to the copy of the repository on the workstation. What’s really nice is that Git manages the line endings for me, which is another thing I don’t need to worry about.

So far this process has worked really well for me. If you have any thoughts about this approach, contact me on Twitter.

Using Bootlint with Laravel and PHPUnit

Photo by: Beat Küng.
Photo by: Beat Küng.

A few days ago I wrote about a technique I’m using to locally validate the HTML5 produced by my Laravel web application. I have developed a similar technique to integrate Bootlint with my PHPUnit tests.

I am using Bootstrap to style my web application for two main reasons. First, it is what all the cool kids are using, and who doesn’t want to be a cool kid?

Second, it provides a basis for a consistent look and feel, that supports a good user experience, with the minimum of effort on my part. I’m a developer with an interest in user experience, I’m not a designer with skills in choosing colours, fonts etc.

Using the class below, I am able to achieve my goal of checking the HTML of my Laravel app for common Bootstrap errors, automatically as part of the test suite.

The canBootlint() function checks to see if the Bootlint application is installed and available. It does this using the ExecutableFinder class, which is a part of the Process Component of the Symfony framework. In this way, the tests can be automatically skipped if the Bootlint app is not available.

The validateRoute() function is responsible for checking the generated HTML for lint errors. It does this by fetching the content of the page, writing the HTML to a temporary file, and passing the path to the file to the bootlint application.

The other functions in the class, such as the testBasicHtmlValid() setup the web application for testing. For example creating test users and data before calling thevalidateRoute() function with the required route.

When the unit tests are run, either the HTML for each route that you need to test is checked by the Bootlint app, or the tests are skipped if it is not available.

I hope this post helps others, who like me, are looking for a way to ensure common errors in the use of Bootstrap are not included in the HTML that is returned by thier Laravel routes.

If you have any thoughts about this approach, contact me on Twitter.

Validating HTML5 using Laravel and PHPUnit

Photo by: slavik_V.
Photo by: slavik_V.

Working as a Business Analyst, in the Student Systems team, at Flinders University means that I don’t get to work on programming code as much as I used to.

This is a good thing. It means I can exercise my ‘softer’ skills such as systems analysis, design, writing documentation and requirements gathering. I also get to write some truly epic SQL queries.

That said, I’ve also been working on a new web application using Laravel that I hope will make a positive impact on my team. I’m a firm believer in using unit testing to improve the quality of my code, and this post is about one such unit test.

I want to ensure that the HTML code that is generated by the web application is valid according to the HTML 5 standard. This means, that I wanted a way to identify markup that is incorrect in some way. For example invalid nesting of tags, unclosed tags etc.

I started with the Markup Validation for PHPUnit extension written by Kevin Weber. This extension makes it easy to include an assertion in your unit tests that checks the validity of your HTML.

The extension in turn uses the (X)HTML5 Validator to do the actual validation. The one drawback of this, from my perspective, is that the HTML is sent to an external third party for validation. I wanted the validation to occur locally in my development environment.

This is how I achieved my goal of validating the HTML locally on my development machine using unit tests.

First, I wrote a custom connector class to use a local install of the validator like this:

Second, I wrote a test case using code like this:

The canValidate() function uses Guzzle PHP HTTP client to see if the local validator is available. The value returned from this function is used to determine if the tests should be skipped or not. In this way, if the validator is not available the other test cases can still complete successfully.

The validateRoute() function is responsible for making a request to the Laravel application and validating the response. The other functions in the class, such as the testBasicHtmlValid() setup the web application for testing. For example creating test users and data before calling the required route.

Lastly to use a local version of the validator application, download and unzip the latest release of the application from the repository on GitHub. Once extracted start a local instance using the following command:

When the unit tests are run, either the HTML for each route that you need to test is validated, or the tests are skipped if the validator is not available.

I hope this post helps others, who like me, are looking for a way to validate the HTML that is returned by the Laravel routes. If you have any thoughts about this approach, contact me on Twitter.

Today I crossed over to the dark side and joined Facebook

Photo By: tookapic.
Photo By: tookapic.

Earlier today I joined Facebook. I feel like I’ve crossed over to the dark side. My Facebook profile is available here.

I’ve resisted joining Facebook for many years, in fact I resisted joining social networks for more years than I care to count. I was happy with my blog and using Twitter. My Twitter profile is available here.

Earlier this year my friend Mark Drechsler convinced me to set up a LinkedIn profile, which is available here. That was the start of the slippery slope into social media.

After I completed the signup process I tweeted about it.

My friend Kahiwa Sebire wanted to know why after all this time, I’ve succumbed to the lure of Facebook. Essentially it comes down to the following three reasons.

First, I’ve been noticing that there is more and more content that is exclusively available on the Facebook platform, which I’m missing out on. Including the pages of some of my favourite podcasts including:

Perhaps now that I have an account, I’ll be able to contribute to the vibrant communities around these podcasts and other content.

I’ve also noticed that some of the activities that my little girl is involved in, are promoted on Facebook. I increasingly feel like I’m missing out on that aspect of her life.

Second, many of my friends use Facebook to communicate and keep in touch with each other. In the past I’ve been very bad at using email, and especially the phone, to keep in touch with friends. My hope is that through Facebook we can keep in contact easier and with more success.

This third thing is what tipped me over the edge.

My little girl, who is four, loves to talk to her Granny and Pa in Queensland on the phone. The trouble is that she hasn’t quite grasped the idea that they can hear her, but they can’t see her. So she spends time trying to show them her favourite toy, latest craft masterpiece, or lego construction.

We’ve tried various video chat services in the past, such as Google Hangouts and Skype, with limited success. We even tried 3G video calling, but as they have an Android based phone, and I have an Apple iPhone, it wasn’t possible.

I want her to have a close relationship with her grand parents, and video calling seems like the best alternative to actually being with them.

Granny is already on Facebook, and is familiar with using Facebook to chat. My understanding is that Facebook Video calling is super easy to use. My hope is that we can use this service, where other services have failed.

So in essence the main reason for having an account, the thing that pushed me over the edge, is video calling between my little girl and her grandparents.

It’s an experiment, and I’ll post here on my blog about the results.