Archive for the 'How-to' Category

How to translate a PDF document

Last night I was trying to translate Dröge, E., Maghferat, P., Puschmann, C., Verbina, J., & Weller, K. (in press/2011). Konferenz-Tweets. Ein Ansatz zur Analyse der TwitterKommunikation bei wissenschaftlichen Konferenzen. Proceedings of the 12th International Symposium for Information Science (pp. n.n.). Boizenburg: Verlag Werner Hülsbusch. (pdf link to paper).

I thought The Google Doc Viewer would have this feature built in but alas no. The clumsy workaround is to drag and select the text (Ctrl+A grabs the Doc Viewer interface) before coping and pasting into Google Translate.

I then discovered that copying the pdf url into Google Translate does the job without the hassle of copy/paste (link to translated pdf).

[The caveat to all this is the original pdf must be accessible ie still contain the raw text rather than being an image] 

Festive treat: How-to temporarily stop receiving JISCMail list messages

I’ve a very complicated email setup which involves mail forwarding, group email addresses and  loads of rules and alerts. I also have to keep a passing eye on work email over the holidays to keep projects like EduApps and MyStudyBar ticking over. Consequently, I’ll be dipping into email using the brilliant (and open source) K9 email app for Android.

So that I don’t miss something important in the gentle hum of all my mail subscriptions for the holidays I’ll be temporarily suspending the email I receive from most of the 34 JISCMail lists I subscribe to. Below is a quick screencast showing how to suspend JISCMail messages (to restart receiving is a similar process). Happy holidays!

Cooking: A Custom Search Engine for … with Edublog 2010 Nominees

In my spare time I like to do a bit of cooking. I’m mainly a recipes kind of a guy, using the experience of recreating something tried and tested to build a foundation of knowledge to explore some of my own personal creations.

The same is true for my interest in educational mash-ups. Trying out other peoples ideas to improve my basic comprehension as well as looking for opportunities for new twists.       

Tonight I’ve been faithfully recreating Tony Hirst’s A Custom Search Engine for the Computer Weekly IT Blog Awards 2010 Nominees using the list of shortlisted nominations for the 2010 Edublog Awards.

Like Tony’s experience with the Computer Weekly awards Edublogs have gone down the route of just having a linked list of nominations in each of the categories. It would have been nice to have an OPML file for the available feeds but with almost 600 shortlisted nominations I guess their focus is on other priorities.

Here’s how I got on. One of Tony’s required ingredients is a lists of nominated blog urls. Fortunately there is a list of these on the Edublogs homepage but the urls are behind text links so copying and pasting into Excel hides the url:

Excel Spreadsheet of 2010 Edublog award nominations

Not wanting to individually copy the url from 600 links I looked to see if there was a way of using a formula to get the links. I didn’t find a formula but has a handy macro for Extracting URLs from Hyperlinks. I’m not going to go into macros but if it is something you would like to find out about I’m sure ExcelTips is an ideal place to start. The macro they suggest is:

Sub ExtractHL()
    Dim HL As Hyperlink
    For Each HL In ActiveSheet.Hyperlinks
        HL.Range.Offset(0, 1).Value = HL.Address
End Sub


This cycles through the sheet and for each hyperlink it find it puts the link address in the cell next to it.

Excel spreadsheet with hyperlink addresses extracted

With this I was able to get back to Tony’s recipe. When it came to Step 2 Refinements I hit a bit of a snag as there appears to be a limit of 16 possible refinements in Google CSE and 23 Edublog award categories. My solution to merge the less bloggy type categories into ‘Other’.

In Step 4 Preparing the URLs I also went my own way, modifying Tony’s:


formula to:


[basically if end of the url has ‘/’ add ‘*’ else add ‘/*’. This catches .com and but doesn’t work if the url ends with a querystring or .file_extension – manual sweep used to pick up any problems]

Here’s the resulting TSV file I uploaded for more example. With Google Spreadsheet you can output in different formats including TSV by changing the output=txt e.g. here’s the same sheets as TSV which got me wondering if you could just point CSE to a Google Spreadsheet. There are options in CSE to host your own annotations XML or point to a feed but I can’t see a way for hosting it as Spreadsheet (I did come across the csesheet project which lets you configure your custom search engine through a Google Spreadsheet, but will let someone else look into that one.

So here is the fruits of my labour a Google Custom Search Engine of the 2010 Edublogs Award nominations and of course using my How to Google Instant(ise) a Custom Search Engine (CSE) the

Instantised Google Custom Search Engine of the 2010 Edublogs Award nominations

How to Google Instant(ise) a Custom Search Engine (CSE) – Revisited

Previously I posted How to Google Instant(ise) a Custom Search Engine (CSE), which like a lot of my pet projects is perpetual beta (my general fallback to explain away bad coding or user interface). In particular it wasn’t until I took Chris Jobling’s Google Custom Search Engine for #PLENK2010 and ‘instantise’ it that a couple of issues became very apparent:

  1. Wouldn’t it be good to allow a traditional search on hitting the return key or clicking ‘search’.
  2. It would be great to make it easier to share the joy of Instant Custom Search Engines.
  3. Google Scribe was more of a hinder than help

So I’ve come up with Instant CSE v2. This version has been beatified slightly using the Google search styling and also pulls the traditional Google CSE ‘search element’ results in when the search form is submitted. You can also instantise your own custom search by extracting your CSE ID and adding it to the url e.g. (I haven’t fully tested this feature so feedback is very welcome).

If you are interested in making your own custom searches for courses or events I recommend reading Alan Levine’s OPML to CSE recipe (OPML is one way to output the source url for a collection of RSS feeds) or Tony Hirst’s  work on hashtag communities.

A couple of Instant CSE’s to play with:

How to Google Instant(ise) a Custom Search Engine (CSE)

Furry 2yo instant coffee
Furry 2yo instant coffee
Originally uploaded by avlxyz

Update: This solution has evolved slightly. More information in How to Google Instant(ise) a Custom Search Engine (CSE) – Revisited

Google have grabbed quite a few headlines with their new Instant search and there has been a rush of developers ‘instantising’ other sites. The one which has got the most attention is Stanford student Feross Aboukhadijeh who after making YouTube Instant has been offered a job with YouTube.

Following this and some other ‘Instant’ sites popping up (usually with an employ me banner) Tam Denholm has come up with which at last count has 16 different sites that you can get an instant style search result. A number of these are created by just adding a ‘’ operator which limits the search just to a particular domain.

But what is you want to search across multiple domains like the ALTC2010 custom search engine created by Tony Hirst from the #altc2010 hashtag community (See Deriving a Persistent EdTech Context from the ALTC2010 Twitter Backchannel)?

Fortunately the Google AJAX Search API used in Tam’s example can be directed filtered using a Google Custom Search Engine. Here’s how to do it (BTW :

  1. Log in to Custom Search and set up your own custom search engine
  2. Next you need to sign up for an API key on the Google AJAX Search API
  3. Download this code unpacking the files
  4. In instant.js you will need to enter you AJAX API key and your Google Custom Search ID (this information is on the Basic’s page of the CSE control panel)
  5. Upload files to your server and test them

I only modified Tam’s files slightly but one addition I made was to include the Google Scribe bookmarklet script. Google Scribe is a Google Labs project which provides autotext completion. Whilst this is probably not as accurate as the prediction used in Google Instant (Scribe helps build sentences rather than return the most popular search terms) it still potentially speeds up the process of getting search results (here is more info on Google Instant, behind the scenes).
If you want to see how all of this looks:

*** Here is a Google Instant(ish) search of this blog and some of my other social media activity ***

BTW if anyone wants to give me a job you should also check out my post on Convergence @youtube meets @twitter: In timeline commenting of YouTube videos using Twitter [uTitle] ;-)

Using YouTube for audio/video feedback for students

A long, long, long time ago I wrote a post Using Tokbox for Live and Recorded Video Feedback in which I demonstrated how the free ManyCam software could be used to turn your desktop into a virtual webcam to provide feedback on students work in a Russell Stannard styley. Recently my colleague Kenji Lamb was showing me how you could directly record your webcam using YouTube, so I thought I would revisit this idea.

This time instead of focusing on the use of the visual element as a tool to direct students attention to a specific part of a assessment submission (e.g. highlight and talking about parts of a word document), I thought it would be interesting to demonstrate it in a more abstract way using images to reinforcing audio comments (e.g. you did good – happy face; you did bad – sad face).

When previously looking at audio feedback I’ve been very aware that reducing as much of the administrative burden is very important. Online form filling whether it be through the VLE, other systems or in the YouTube example, can be a bit of a chore so in this demonstration I also touch upon using bookmarklets to remove some of the burden. Here is a link to the bookmarklet I created for student feedback on YouTube (YouTube Feedback Template – you should be able drag and drop this to your bookmark toolbar but if you are reading this through an RSS reader it might get stripped out).

Having this link in you toolbar means when you get to the video settings you can click it to populate the form. Bookmarklets are a nice tool to have in the chest so I’ve covered them in more detail in Bookmarklets: Auto form filling and more. This post also shows you how you can create your own custom filling bookmarklet using Benjamin Keen’s Bookmarklet Generator.

So here it his a quick overview of using YouTube for recording student feedback:

Comments powered by Twitter Click here to add yours ...

The need for speed: Tuning up to keep your students (and Google) happy

The need for speed
The need for speed
Originally uploaded by toastforbrekkie

Google recently announced that it is using site speed in web search ranking and while the weighting of this metric is slight (less than 1% of search queries will be affected) it is still good practice to make sure your web resources are optimised.

I was a little shocked to discover MASHe didn’t fair particularly well on speed tests. Inherently, self-hosted WordPress blogs give you a lot of flexibility in how you configure your blog, making endless tweaks to its appearance and available functionality via plugins. The cost of this flexibility is you can quickly turn your site into a quagmire of extra coding slowing down page loading times. You are also reliant on your server configuration being correctly optimised. This post documents what I discovered and how I fixed it.


Having already signed up to Google’s Webmaster Tools I was able to check the Labs –> Site performance and was a little shocked to see “your site take 6.9 seconds to load (updated on Apr 2, 2010). This is slower than 83% of sites

My first step was to diagnose where I was loosing time. The site performance results give you some pointers but these aren’t real-time and I wanted a way to make sure I was heading in the right direction. I chose to download Google’s Page Speed and Yahoo’s YSlow. Both these tools run a barrage of tests on a web page, highlighting area’s where you can make improvements.


Because performance of self-hosted WordPress blogs is a known problem there are a number of plugin’s available to optimise performance. Previously I had been using  WP Super Cache  but as the site performance data has shown there is perhaps more I could be doing, so I switched to W3 Total Cache which has some nice features. The key words to look out for when optimising websites are page caching, server-side gzip compression, content delivery network (CDN) integration (also known as parallelizing) and minifying.  

Just to expand on a couple of these:

Server-side compression – the basic idea is a requested webpage is compressed at the server before being sent to the user reducing the bandwidth required. A number of 3rd party hosts don’t enable this feature presumably because of increased processing load on their servers. So despite my best efforts I was unable to use server-side compression.

CDN -  because there is a limit to the number of page elements the browser can download at one time, distributing assets across hostnames allows items more items to be downloaded simultaneously. A quick fix for me was to use our host providers control panel to create a sub-domain which mirrors my existing directory structure. W3 Total Cache then allows you to choose the type of files to server from the different domain practically allowing you to doubled the number of page elements downloaded simultaneously.

Minifying – is the technique of compacting and sometimes merging different HTML, CSS and JavaScript elements. Compaction is achieved by removing additional whitespaces, line breaks and code comments. Whilst W3 Total Cache has minifying features it didn’t like my CSS and JavaScript so I used a separate WP Minify plugin.

The results are looking reasonably promising, pages that have been cached loading in 1.5-2 seconds. I’ve also gone from grade F on YSlow to grade B/C. The problem I’ve still got is pages that haven’t been visited for a long time (not being cached, or having to be re-cached) taking 20 seconds to load. I’ll perhaps come back to this another day unless anyone has some immediate suggestions. In the meantime I need to get back to posts on enhancing teaching and learning with technology ;-)     

Creating a PDF or eBook from an RSS feed (

A couple of weeks ago I was interested to read Joss Winn’s blog post on  Creating a PDF or eBook from an RSS feed in which he highlights using the FeedBooks service. This was ideal timing as we are always looking for new ways to make RSC NewsFeed readable in as many formats as possible.

The post has generated a number of comments, in particular, James Kwak at baselinescenario mentioned that a limitation of FeedBooks was that it didn’t include the post author or date in the automatically generated eBook.

This is very easy to do using Yahoo Pipes. Here is my ‘feedbooks pipe’. You can either run this pipe entering the url of the RSS feed of your blog. This will let you get the RSS feed required for FeedBooks (step 4 in Joss’s instructions). Alternatively you can just enter{enter your blog rss feed url here}. Feel free to clone this pipe if you would like to experiment with other manipulations. I’ve already created this extended version for WordPress users to only include last months posts

feedbooks pipe[All this pipe is doing is taking the feed url, copying the pubDate (item publish date), then using Regex to edit some of the post items. The first regex replaces the long date format (e.g. Fri, 15 Jan 2010 10:03:54 +0000) by extracting the pattern ‘digits character digits’. The next 2 entries modify the post description by putting ‘the author {dc:creator} | the date {date} plus break return’ before the existing content]

This week’s solutions: export twitter followers, auto anchors for WordPress and shortening urls in twitter badges

Thought I’d share some solutions I’ve found for problems I’ve encountered this week.

Problem: How to export a table (*.xls or *.csv) of twitter followers?
Solution: I first tried which was good because it didn’t ask for twitter account login details, but the results are limited to 100 entries. I then tried which did the job (but does require twitter username and password) Update: wrote a Google Spreadsheet to do this - I feel more secure using registering for my own Twitter API access

Problem: Adding anchors to WordPress blog?
Solution: This problem was asked by our e-learning accessibility expert, Craig Mill. He wanted to make some of his longer blog posts more accessible by having a table of contents at the top. The solution was very straight forward as MindWireMedia have created the Auto Anchor List plugin which does exactly what we were looking for. The plugin scans though posts and pages looking for headings, automatically creating a navigable contents list at the beginning of the post. To see it in action check out Craig’s e-Inclusion Blog

Long url problem on twitter badgeProblem: How to reformat long urls in twitter badges? We had a problem with urls in the @rsc_ne_scotland twitter badge which we use for News announcements on our site.
Solution: Using help from this how-to on Taco Quest and code from sevenofnine on I came up with the code below. If you would like to use it just grab this JavaScript file to replace ‘ blogger.js’ (this method of creating twitter badges has changed but here is an explanation for adding an old widget):

 function twitterCallback2(twitters) {
    var statusHTML = [];
    for (var i = 0; i & lt; twitters.length; i++) {
        var username = twitters[i].user.screen_name;
        var status = twitters[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function (url) {
            var lm = 28;
            var strD = url.split("");
            var strB = "";
            var strT = "";
            var breakChar = "...";
            for (var i = 0; i & lt; strD.length; i++) {
                strB += strD[i];
                if (strB.length & gt; = lm) {
                    strT += strB + breakChar;
                    strB = "";
            if (strD.length & lt; lm) {
                strT = url;
            return '<a href="' + url + '">' + strT + '</a>';
        }).replace(/\[email protected]([_a-z0-9]+)/ig, function (reply) {
            return  reply.charAt(0) + '<a href="' + reply.substring(1) + '">' + reply.substring(1) + '</a>';
        statusHTML.push('<li><span>' + status + '</span><br/><a style="font-size:85%" href="' + username + '/statuses/' + twitters[i].id + '">' + relative_time(twitters[i].created_at) + '</a></li>');
    document.getElementById('twitter_update_list').innerHTML = statusHTML.join('');

Festive fun: Embedding and interacting with web2.0 in MS Outlook 2007

warning [Just to warn you this post is more technical than my usual offerings and is perhaps not that practical either. Hopefully some of you will still find this useful. I’m shoehorning this post in under the ‘festive clause’ ;)]

If you are running Microsoft Vista with Outlook 2007 you may have noticed that you can preview certain email attachments in Outlook (this isn’t native functionality for XP users. A workaround is highlighted in the ‘how-to’ below). Last week I was trying to using this functionality to view an embedded Google wave. Unfortunately, despite installing Chrome Frames, it didn’t work (I think because either Microsoft wasn’t caching the JavaScript locally for wave or security prevents JavaScript writing an iframe).

While embedding Wave doesn’t work, interacting with a lot of other social tools (Etherpad, Mindmeister, Google Docs, Facebook, Flickr, Ning … ) does! Don’t believe me watch this:

How to do it

If you are using XP and Outlook 2007 you’ll first need to install some custom preview handlers. These basically allow you to preview email attachments in Outlook’s reading pane. Fortunately Gil Azar has already made a package of preview handlers. Gil’s instructions and download are here.

All we are doing is:

  1. creating a local web page which embeds your chosen site
  2. creating a new email
  3. attaching the file
  4. saving the message as a draft
  5. moving the draft to a folder (in my case I created one called ‘MyStuff’)

Then when you want to access your chose site just click on the attachment to view it. This video demonstrates the process:

Creating the web page attachment

For the example in the video above I used iframes. These basically allow you to place another website within a webpage. The code I’m using is below. For the different sites you want to include you just need to change the iframe src, which in the case below is Some sites provide specific instructions on how to embed elements (etherpad for example). If you are wondering what the rest of the code does it just resizes the height of the frame to fill the window. Here is a compressed folder (*.zip) of some of the pages I created for the video.

<title>Test Page</title>
<iframe id="frame" src="" width="100%" frameborder="0" marginheight="0" marginwidth="0"></iframe>

<script type="text/javascript">
// From
function resizeIframe() {
var height = document.documentElement.clientHeight;
height -= document.getElementById('frame').offsetTop;
// not sure how to get this dynamically
height -= 20; /* whatever you set your body bottom margin/padding to be */
document.getElementById('frame').style.height = height +"px";
document.getElementById('frame').onload = resizeIframe;
window.onresize = resizeIframe;

Enjoy – Seasons Greetings!


This blog is authored by Martin Hawksey e-Learning Advisor (Higher Education) at the JISC RSC Scotland N&E.

mhawksey [at] | 0131 559 4112 | @mhawksey

JISC RSC Scotland North & East logo

If you would like to subscribe to my monthly digest please enter your email address in the box below (other ways are available to subscribe from the button below):

Subscribe to MASHe to monthly email updates


The MASHezine (tabloid)

It's back! A tabloid edition of the latest posts in PDF format (complete with QR Codes). Click here to view the MASHezine

Preview powered by: Webthumb

The MASHezine (eBook)

MASHe is also available in ebook and can be downloaded in the following formats:



Opinions expressed in this blog are not necessarily those of the JISC RSC Scotland North & East.

JISC Advance Logo

JISC Advance is a new organisation that brings together the collective expertise of established JISC services:

For further information visit

Creative Commons Licence
Unless otherwise stated this work is licensed under a Creative Commons Attribution-ShareAlike 2.5 UK: Scotland License