Nov 042014

I had to post this note to self as it has driven me crazy for a while it was surprisingly difficult to identify (and locate via search) why jPlayer wasn’t working on Chrome for Android, it must be annoying a lot of people.  This issue occurs in Chrome versions above Google Chrome v.36.0.1985.122 but definitely check it out of you cannot get jPlayer to work in Android Chrome.

The two key threads are here:!msg/jplayer/BoVUNok0yl4/LU8q2wggQaYJ!msg/jplayer/-i-Hb9gs8aM/07rI5BJg-bUJ

Basically highlighting an issue with the “androidFix” process they are required to keep in jPlayer due to the vagaries of Chrome on Android:

The issue related to:

self.androidFix.setMedia = true;

Which you can simply comment out of jquery.jplayer.js (not the minified version which will make things a lot harder!)

Take a look at the issues around Android here


“The problem here is that Google keep moving the goal posts.

First of all they took about 4 years to fix a basic bug with the audio element… Simply change the SRC and tell it to play and OMFG that was too complicated. So we had to allow it time for a cup of warm milk and a biscuit in between changing the media URL and asking it to play. To do this, we used the progress event to ensure that the media element was ready and setup with the new URL and ready to play it without throwing the pacifier. We used the progress event as an alternative to the “wait 3 seconds and it should work” solution… After all, we are making every android user wait, so I wanted it to be the absolute minimum and robust time, hence the progress event.
Pretty much as we released the android fix, the mainstream – non google – devices, like Samsung, started working without the fix in the default browser.
In the current Android, the progress event does not fire in the same way as before. Before, changing the SRC would cause the progress event to fire, which we used to apply the fix. Now that never happens, so the fix is breaking all of android.
I am currently looking into other events that we could use for the purpose, otherwise we cannot fix both the old bugs while supporting the current release… And the current release will win if it comes to an ultimatum. ie., Just remove the fix.
It should be noted, that this android fix that I talk of only affected cases where you changed the media, such as a playlist.”

Alternatively you can go to the latest and greatest version 2.71 which contains the fix but at time of writing wasn’t listed on the main jPlayer site:

direct link to script (don’t hotlink – it won’t work, and it’ll need minifiying)
Thanks to the ongoing efforts of the jPlayer team, who do an awesome job on this.


Oct 262014

I love BackupPC it’s a truly awesome piece of software and a shining light in the open source world, but it can be cryptic and when it goes wrong the potential fallout is pretty major. The other day on one of my primary systems the backups began to fail with Fatal error during xfer (Child exited prematurely) no more detail simply that.  This is precisely the sort of backup fail I dread, they always seem to become apparent just before bed time!

Anyway I needed to see the behind the scenes output of what Rsync was doing so instep the handy debug tool BackupPC_dump this is precisely the tool you need to debug “Fatal error during xfer” errors.

You can see the full instruction here but the key bit is:

The BackupPC_dump command has a -v option, so the easiest way to debug backup problems on a specific host is to run BackupPC_dump manually as the BackupPC user:

__INSTALLDIR__/bin/BackupPC_dump -v -f hostName

which for me translated to:

cd /
su backuppc
./usr/share/backuppc/bin/BackupPC_dump -v -f
This quickly helped me identify problems with transferring of a particular sub folder, that as it happened wasn’t required anyway.  It also gave me a really handy look into the inner workings of backup pc rsync and how it works.
Good luck, hope it helps you resolve your issues with Fatal error during xfer (Child exited prematurely).




Jan 122014

First run of the brand spanking new Intellij 13 – and I get createComponent() returns null for: class com.intellij.execution.RunManager – it turns out to be an issue with plugins, so remove your .IdeaIC13\config\plugins directory and restart you’ll be good to go (sans plugins) – no more createComponent() returns null for: class com.intellij.execution.RunManager issues on Intellij 13!

Nov 182013

As much as a note to self as anything else, for some reason it proved hard to find out how I could use html in the auto validation messages generated by models in CakePHP.  Now it’s totally arguable that the use of html is not best practice in this case, the right or wrong of that on a technical level is entirely up to you however assuming you do need/want to use html in the validation messages just make sure that on forms that are applicable you either use a custom form error trap:




OR the simpler mechanism is:


As an added benefit assuming you’re wanting to wrap your html validation message in a custom div simply add a class attribute:

$this->Form->input(‘yourfield’,array(‘error’=>array(‘escape’=false,’class’=>’alert alert-error’);

So this is how you put html in CakePhp validation messages!



Oct 152013

Visual Studio has come a long way since I used it last, and the Git integration is a powerful new addition.  While the interface is a bit tricky to navigate, Linux command line makes you think in keywords not mouse clicks, overall it’s a great new feature that introduces an amazing source control system to the VS range.  I’ve muddled my way through it for a while until this evening when out of the blue I received an error:

“The origin remote is set to fetch tags only (tagopt = –tags). This may be due to a bug in a previous version of Visual Studio Tools for Git. Fix my configuration or don’t prompt again.”

Clicking “fix my configuration” did nothing and there was no solution to be found.  So going back to Git basics I took a look at the git config file – this will be in:

/.git/ folder (in your solution root folder)

and in the “config” (no extension) file.

Make a backup of the file (after closing VS) and scan down the file for:

tagopt = –tags

Remove this line (and this line only)

Restart VS and try again – you should nolonger receive “The origin remote is set to fetch tags only (tagopt = –tags). ” and your commits/pulls/merges should work just fine.

There’s no visual editor in Visual Studio Tools for the config file that I can see (please add a comment if this isn’t true) – so going back to core Git config is the way to go.

If there’s a better more VS way to resolve the The origin remote is set to fetch tags only (tagopt = –tags). Please comment below!




May 232013

I’ve never learned French properly. I love the sound of the language and can hack my way around a cafe menu when visiting France but really don’t know how to speak it at all! It’s a little ironic (though only a little) therefore that my most recent project is all about testing your French! I am very embarrassed I’ve never learned French properly. I love the sound of the language and can hack my way around a cafe menu when visiting France but really don’t know how to speak it at all! It’s a little ironic (though only a little) therefore that my most recent project is all about testing your French! I am very fortunately the CTO of a company called Kwiziq which has just released – an application aiming to help you improve your French through targeted testing and then personalised learning recommendations.

We call this approach Test Driven Learning, meaning that tests are no longer something you do to evaluate how much you fortunately the CTO of a company called Kwiziq which has just released – an application aiming to help you improve your French through targeted testing and then personalised learning recommendations.

We call this approach Test Driven Learning, meaning that tests are no longer something you do to simply evaluate your progress they’re tools to use to actively improve. uses a terribly clever (if I do say so myself) set of algorithms to analyse your capabilities. It does this through simple French tests and quizzes, detailed CEFR based exams, personalised assessments (based on gap analysis and your specific need) as well as several soon to be released Kwiziq based language games, that interpret your game play and responses to help further evaluate your level. We’re gathering all sorts of interesting group data too – helping us identify common problems amongst similar profiles of user and will soon be releasing a set of teacher led testing tools so teachers can incorporate additional testing and learning material into their curriculum easily.

So if you want to know how good your French really is, take a French test now!

May 092013

Following on from a post I wrote a long time ago entitled “What does “__n()” do in cakephp?” I thought I’d follow up with an example of how to actually use the __n() with i18n in cakephp as it’s not obvious and also hard to find examples of use and or documentation.

If you’re using __(n) in version 2.0 or above Cake the documentation is here.  After a brief look around I couldn’t find the 1.3 version please comment if you have the link!  The documentation says this:

 __n(string $singularstring $pluralinteger $countmixed $args = null)
Returns correct plural form of message identified by $singular and $plural for count $count. Some languages have more than one form for plural messages dependent on the count.

This is fine but it doesn’t result in a translation that includes the actual numbers in translated context so here as a note to self more than anything is an example of how to actually use the __n() with i18n in cakephp:

echo sprintf(__n('%s Singularname', '%s Pluralname',$number,true),$number);

e.g. how to show “x dog/s”

echo sprintf(__n('%s dog', '%s dogs',$number,true),$number);


Hope that’s useful!


Jan 212013

For some reason wp_redirect/wp_safe_redirect in WordPress can be a total pain, whether it be when writing custom front end code, plugins or widgets I seem to come across an issue with redirects periodically, with the utterly frustrating “Cannot modify header information – headers already sent” error.  As a heads up, this is caused as the name suggests by  content in a header being pushed down before the redirect is called, this is a generic issue not one that is specific to WordPress.  More often than not it is simple to identify, if any of the involved PHP files have leading or trailing white space, and or there’s some hidden debug output you have forgotten.  Occasionally the issue is WordPress however, in my case the issue of wp_redirect not working on a custom admin page, was caused by a function in

/wp-admin/includes/template.php:1636 or so, whereby headers/html, quite a lot of them are indeed sent as part of the page load process.

Having ensured all of my files were trimmed and there was nothing wrong with my plugin code, I discovered here that there’s a little workaround for forms being called in custom admin pages, that is simply to append:


To your action, e.g.

<form method=”POST” action=”?page=your-plugin-page&noheader=true”>

This resolved my problem instantly – understandably given it suppressed the content being produced in template.php!

Hope it helps anyone having problems with wp_redirect and wp_safe_redirect on custom admin pages in WordPress.



Oct 232012

CSS on your drupal site not loading properly in IE (though working in FireFox)?  Loading sometimes and not others?  This comes down to an extremely annoying bug in IE (all versions) which is described here:

Essentially after the inclusion of 30 css scripts i.e. stops loaidng any more, this is not uncommon in the development (non cached) mode of drupal so can be a real pain when you’re working with lots of modules and need to make changes to the css.

Along comes the “unlimited css” project on the drupal main site

“Unlimited CSS” needs no configuration just install it and it will change the way that drupal (6 only for now) loads CSS to avoid this issue with IE.  Another great module that has saved me lots of head scratching.