This is why you don’t buy cheap-ass tools.

bent chain whip
That $8 chain whip may work for removing a cassette from a freehub, but it’s woefully inadequate for loosening a fixed cog after months of mashing up hills. Bent out of shape without budging the cog. Even the rotafix method barely got it loose.

Coming soon: a DIY chain whip with some serious leverage:

DIY chain whip

This is the battle for the net

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.

Life without Google long-term follow up

creative commons licensed ( BY-NC-ND ) flickr photo shared by jalb
It’s been over two years now, and for the most part my google-free online existence has largely been uneventful. Occasionally youtube tells me that a video is “mature” and requires me to login to prove I’m over 18. So I can live without seeing that particular upload of the Baby Ruth scene in Caddyshack.

Recently (in the past month or so), however, the spam in my inbox has exploded. Bluehost claims to do some spam filtering, but it seems largely ineffective. Lately when I open my email, any where from 50% to 80% of the messages are spam. Thunderbird does a good job of filtering spam when I’m on my laptop, but checking email during the day on my phone or on webmail gives me no apparent filtering at all.

In the long run, I suppose I need to find a new email provider that does a better job of spam filtering. Not sure what I’ll do in the meantime. (And in the time it’s taken to write this post, 3 more spam messages have hit my inbox.)

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.


Haven’t had a coffee-themed post in a while, so here’s this.

Coffee 2014 from jayr sotelo on Vimeo.

h/t Scott Wegna


Happy New Year, everybody; happy birthday Country Joe. I resolve to do what I always do.

So this appears to be my kid’s favorite Xmas present:


Goodbye WP-to-Twitter and Twitter Widget Pro #potcert

cc licensed ( BY NC ) flickr photo shared by Alexander Rutz
I came in to the office this morning to find an email from a student (sent last night) complaining that he couldn’t open the link to today’s assignment on my WordPress blog. Sure enough, I couldn’t open the link either, nor could I bring up the main page or the WordPress admin page.

Uh-oh. Just what I want to deal with before class: my site is gone. Nothing but a blank page.

A quick call to Bluehost tech support (<20 sec. to talk to a person!), and he found that the error log showed a string of errors from WP-to-Twitter. He renamed the directory to disable the plugin, and my website came back immediately. I have my class domain set up with WP Multisite so that I can have different blogs for different classes and POTCert. I only use twitter with one of the four domains I have in the network, however. The other 3 constantly throw a warning message onto my Dashboard that I need to authorize Twitter.

Well, I don’t want to authorize Twitter for all of my blogs. I don’t want my Twitter stream clogged up with every bit of administrivia, every announcement, and every assignment I post for all of my classes. I’m pretty sure my followers don’t either. (You’re welcome.) So until today, I just ignored the warning messages.

After I got off the phone, I deleted WP-To-Twitter from my network, and then Twitter Widget Pro started throwing the same warning that I need to authorize Twitter. Not wanting to take another chance of blowing up my site, I deleted Twitter Widget Pro.

To be fair, both of those plugins work beautifully on this site, which is a single WP installation. But on a Multisite installation where some sites use them and others don’t, they’re a disaster waiting to happen.

Why does MSI call it the “Wind”?

I have an old MSI Wind netbook (U123) that has a crufty old WinXP installation that’s gotten old & slow. I don’t really need a Windows machine anymore, so I decided to put on a clean installation of windows and use it as a dedicated VAG-COM scanner with VCDS Lite to keep our aging VWs on the road for a few more years.

And that’s when my troubles began. You see, when MSI shipped it with restore and driver software, they shipped it on shiny silver discs. For a machine with no optical drive. There was no restore partition, so the F3 factory restore function didn’t work. On top of that, WinXP isn’t designed to install from a USB stick, just from a CD. On top of that, the MSI recovery CD didn’t have a full Windows installation on it. Luckily, I had an old CD of WinXP Professional (SP1!) from a now-defunct desktop PC I built way back in ought-three (Sometimes being a packrat comes in handy).

Eventually, I found my way to WinSetupFromUSB, software that will copy Windows installation files from a CD to a bootable USB drive, but only on a Windows machine. Luckily, I still had the old Windows installation in place on the netbook, so I ripped an ISO on my Ubuntu laptop, copied it to the netbook via USB stick, and created a bootable USB. At that point, installation only took two tries–when the Windows installer wants to reboot and says to remove any floppies, don’t remove the USB stick. At that point I had a working WinXP box, but only with SP1. My home network uses WPA2 authentication, so I couldn’t connect to the network. I then downloaded SP2 & SP3 from Microsoft, copied to a USB stick and transferred over to the netbook. To connect to the network, I had to go into settings and change the security from WPA2-PSK to WPA2 to connect. At that point, Windows found over 122 updates to download, plus I needed Firefox and Avast! antivirus. All in all, I started on Wednesday evening and it took until late Thursday afternoon to get everything installed and running. Ugh.