Category Archives: Ed Tech

Embedding slides in Canvas announcements

Slide projector flickr photo by Yair Aronshtam shared under a Creative Commons (BY-SA) license
For several years, I used Speakerdeck to embed class slides in my WordPress site. That worked great for awhile, but since my institution adopted Canvas, there’s been a strong pressure to use Canvas for every class. Unfortunately, as Lisa Lane will attest, Canvas is passive-aggressive when it comes to embedding. It will do it, but it won’t like it, and you may not either.

I used the switch to Canvas as an excuse to move from providing students slides to giving them guided lecture notes, which were easy enough to upload to Canvas as a pdf. Now, however, I’ve got a deck of slides for a test review that I don’t really want to reduce to an outline.

So, back to the drawing board. Lisa’s post from last December (Merry Christmas, Lisa!) sent me to Laura Gibbs’ widget warehouse, and from there I was able to reverse engineer one of her her Canvas-embeddable widgets. *Whew*.

So here’s what I did:

  • First, upload a pdf of the slide deck to Speakerdeck.
  • Next steal borrow the html from one of Laura’s canvas widgets, and replace the <script> … </script> with the Speakerdeck embed code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Canvas: Beowulf slides</title>
    <script async class="speakerdeck-embed" data-id="a3384cc4f5504e02ab964340ecfa0f55" data-ratio="1.33333333333333"
  • Upload the resulting html file to your hosting account, and then embed that page in Canvas as an iframe:
    <iframe src="" width="1024" height="768"></iframe>
  • And Bob’s your uncle, you’ve got a slide presentation embedded in an announcement, or wherever you’d like to put it.

Update: Looks like there’s an even easier way that doesn’t require having a hosting account: upload the html file to Canvas and then link the iframe directly to the Canvas file.

Off to a rocky start

creative commons licensed ( BY ) flickr photo shared by Wystan

This semester I thought I’d try something new and run my courses entirely within the official CMS. Over the past few years I’ve gotten a serious case of user account fatigue and dread the thought of signing up for yet another userid and password combination to be floating out there in the cloud more or less forever. I’ve used WordPress for class in the past, but these days I’m hesitant to make my students do something I wouldn’t, so rather than make them get a new WordPress account, I thought I’d use the “blog” tool in Blackboard.


It’s a usability and user interface nightmare. Navigation is opaque. There’s no way to see all the class’s posts in a chronological feed (y’know, like a blog?);  each student’s posts are in a separate silo (within a silo!); students can’t figure out how to post, or how to see anyone else’s blog; you can’t copy/paste text into a text box in Bb(?!?); there’s no way to see when a blog has new entries (except by remembering how many total entries there were the last time I looked); Blackboard helpfully tells me that there are 10 new posts but unhelpfully won’t link to them . . . ugh.

Converting WordPress Multisite to a single site

creative commons licensed ( BY-NC-SA ) flickr photo shared by Packfill
A few years ago, in a fit of ambition and desire to host all the things, I set up my school blog as a wordpress multisite with four separate blogs, three of which had separate subdomains: one for my face to face classes, one each for my online classes, and one for Pedagogy First! (oh yeah, and there’s this personal blog too).

Now, it’s too much. I don’t want to update five blogs. Hell, I’m not even really keeping up with one. Additionally, for some inscrutable algorithmic reason, Google responds to searches by my students for my blog with links to my online class blogs, which have lain dormant for years, rather than to my main school blog.

Enough. One school blog and one personal blog are enough. So how do you go back? (First obviously, you back up, and then you go back. You’ve been warned.)

This wpmudev blog post walked me through it, but I’ll post instructions here as well for  future reference.

I used file manager in cPanel to edit my wp-config.php file (first I copied it to wp-config.old in case I screwed up). I then deleted the following lines:

define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
$base = '/wordpress/';
define( 'DOMAIN_CURRENT_SITE', 'localhost' );
define( 'PATH_CURRENT_SITE', '/wordpress/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

The wpmudev post called for editing my .htacess file to match the following, but mine was substantially the same, so I left it alone:

RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*.php)$ $2 [L]
RewriteRule . index.php [L]

Next, I edited my wp-config file and dropped the following tables from my database. I’m pretty sure there’s room for disaster in all of the above steps. Backup.


At this point, the other blogs were gone, and I had a single blog. (And by gone, I mean GONE–this doesn’t merge all the subdomains–it just deletes everything but the main blog.)

One thing left to fix: redirecting the subdomains. I had to create a wildcard subdomain, so when someone goes to [subdomain], it still showed the subdomain in the address bar. In cPanel, I went to the subdomain panel and added an explicit subdomain for each of my former subdomains and then I went to the redirect page in cPanel and added a redirect to my main URL so that if someone types the old subdomain, it redirects to the main domain and keeps the URL consistent. PedagogyFirst posts, on the other hand, I redirected to the EdTech category here on my personal blog where I imported all of my old posts. I’m sure I’ve broken a few links on other people’s posts (sorry!), but my posts are still there to be found with a little digging.

Life without Google: 6-month follow-up

cc licensed ( BY NC SD ) flickr photo shared by Eliel

A little over six months ago, I nuked my Google account over their changed privacy policy and terms of service. For me, it was a pretty big change, as I relied pretty heavily on Google’s web services (especially the calendar and email) and I also use an Android phone.

First, the good news: you don’t need Google to have a web presence or an Android device.

The bad news: many, many things are much less convenient without a Google account.

My Google-free existence involves mostly using my self-hosted domain. It was pretty easy to shift to my own email, using Thunderbird on my laptop, K9mail on my phone, and my ISP’s webmail interface everywhere else (Bluehost offers several interfaces, but I find that I like Roundcube the best). For phone apps, I use the Amazon app store instead of Google’s, as well as a few offerings from f-Droid. I know Amazon tracks what I install, but it at least compartmentalizes my data more: Amazon knows a lot less about what I do online than Google does. I use and aCal to manage my calendar. Between the advanced category excluder plug-in and the WordPress Android app, the Snapshots category of my blog does a great job of letting my post snapshots from my phone to twitter without clogging up my front page with every picture I send out. I use Sparse RSS to keep up with feeds on my phone. I’ve found a way to do most of what I used my phone and Google’s web tools for without having a Google account.

Here’s the thing, though, much of what I do is much less convenient now. I exported my contacts from Gmail and imported them to Thunderbird, but I don’t have them on my phone. (I’m sure there’s a way to import them to K9mail, but they still wouldn’t be synchronized.) My RSS reader on the phone doesn’t sync read items with the web-based reader I use. Even though Amazon has a number of apps, they don’t have as many as Google (and without a Google account, I can’t buy the Mighty Eagle for my kid to use in Angry Birds). Whenever Flash releases a new version, my phone is rendered obsolete until I can find a copy of the apk file posted somewhere online. Ephemeral video? Say what you will about HTML5, I still can’t get videos to stream from my hosting account, never mind the fact that my phone records video in h264 but won’t play it in a browser. Google Hangouts offer a very convenient form of video conferencing, but without a Google account, they’re off-limits to me. (I’ve asked for a Big Blue Button installation at work, and even though I’ve been told, “We should be able to do that,” I can’t seem to get anyone to actually make it happen.)

What next? My web and mobile usage are clunkier now than they were before, but I’ve gained a marginal increase in online/mobile privacy. How much? In terms of mobile, probably very little, given how much mobile providers track their customers. Is the slight increase in privacy worth the big decrease in convenience? I don’t know, but the Galaxy Nexus and Nexus 7 are starting to look awfully appealing.

One more thing (about RSS)

Watch on Posterous

One more thing I like about WordPress blogs is that even if you can’t find a feed button, the default feed is [domain]/feed. So for example, if I’m reading Law and the Multiverse and can’t find the RSS feed, I know I can point my feed reader to http://lawandthemultiverse/feed and follow any updates.

(Edited because I realized that although Pedagogy First! uses WordPress, it doesn’t use the default feed. Test links, then post. Doh!)