Second WordPress Plugin Goes Live

Prezi Logo
Logo © Prezi Inc. Used with permission.

It is now almost exactly 4 months since I released my first contribution to the WordPress community, the Document Gallery plugin. This new addition to my work, Prezi Embedder, was designed in order to support simple embedding of presentations designed on prezi.com in WordPress installations.

This plugin was designed out of frustration at the lack of support from the Prezi team for WordPress users. Their only official response to the issues with their embed code in WordPress installs is a link to this forum post, where users present some ways to hack together something that used to work. Recently, even the hacks mentioned in the post were disabled, making it impossible to natively embed Prezis.

After reaching this dead end, I also looked briefly for other plugins developed for this purpose. The one plugin I found only had partial support for the Prezi embed options and, in my testing of the plugin, did not handle any size other than the (tiny!) default embed size.

At this point, I gave up on any pre-existing solution and wrote the embed code into a very simple plugin and linked it to the Error: The id attribute provided does not look right. You entered id=. Error: You must, at minimum include an id attribute: [prezi id='<Prezi ID>'] shortcode. Though I initially wrote the plugin for my own use, I ended up submitting it for listing in the public WordPress Plugin Directory.

This release has had a slower pickup in downloads when compared to my first plugin (which hit 300 downloads in under two days), but that is to be expected given its more specific market. Even given this lower interest, it has still been downloaded 70 times in two days, which I am more than pleased with, especially given that it began as just a tool for my personal use.

(Legally) Hacking Online Defensive Driving Course

Given the tendency for society to interpret hacking as an inherently illegal activity, I must first clarify what the meaning is in this context. While thefreedictionary.com has a definition that would suggest illegality:

To use one’s skill in computer programming to gain illegal or unauthorized access to a file or network.

This is only the second definition. The first (and relevant) definition listed is far less nefarious:

To write or refine computer programs skillfully.

In any event, I’ve said all of that as a very long preamble for the true topic of this post. I recently signed up to take an online defensive driving course on GetDefensive.com. In taking the course, I found it immediately frustrating that each page required the student to remain on that page for a set amount of time before proceeding to the next page of the course. This would not have been so bad, except that the time required for each page was significantly longer than the time I needed to absorb the information.

Once I had completed reading the content on a page, I would go off to another tab in my browser to work on something else, but then I ran into the issue of not knowing when the timer had completed, since it was only visible within the course tab. After making it about half way through the six-hour course, I had had enough. I decided to append the time remaining to the tab title so I could see how much time was remaining without needing to re-open the tab before it had finished.

GetDefensive.com Title HackRemembering my GreaseMonkey from when I had used Firefox, I went to see if something similar existed for Google Chrome. Apparently, Tampermonkey is the go-to for user script management in Chrome.

After playing with the new tool for a few minutes, I threw together a script that pulled the content from the existing count-down timer in the tab and had it duplicate that value in the title. You can see below for the solution I ended up with.

UPDATE (11/28/2013): I got another speeding ticket, which means I had a chance to revisit this solution and one small thing changed — the ID of the object we’re grabbing the time from. The code below is now up-to-date with this new ID.