Dear Google, Like You, I Just Don’t Care…

As many know, when Google App Engine came out I became immediately enamored with it. I saw it as a way to democratize access to server-hosted code. It meant everyone in the world could have server space at no charge and I hoped it would unleash creativity. I wrote the first book on App Engine (released through O’Reilly and Associates). I switched the course I was teaching from Ruby on Rails to use App Engine and it was taught that way for over 3 years. I started doing more and more server side development in Python. I started moving some of my production stuff from PHP to App Engine to show the faith.

But my enthusiasm and rush to embrace all things App Engine was not to last. I could write a book on went wrong with App Engine but here are a few of the high points. (1) They never would help you with performance problems unless your name is “Sal Khan” – they just were the Honey Badger. (2) Once they used us early adopters to Beta test their code by building free applications – the “free” resource levels went down to force more folks to the pay version. (3) They just decided to break working code as they went to Python 2.7 – no need to support legacy (say like Microsoft does) – again the cries of “foul” fell on the deaf Honey Badger ears.

That is not to say that App Engine had zero value. It motivated companies like Amazon to create truly useful services like EC2 that actually met user’s needs and let users do what they wanted and let users log in to diagnose why their code was running slowly. So App Engine was not quite a Google Wave that never took off. More like a Google Reader that told Yahoo that there was demand for such a service.

Google has done a lot of forcing innovation upon us – like the AJAX revolution through Google Maps and GMail. And I love Chrome (I am using it to write this post).

So I have been recently getting mail that my App Engine and Apps stuff that I built during my post-Google I/O (2008, 2009) high are not active so they will be deleted. I have many opportunities to simply “click this button” to extend the life of these things. But this time, it is my turn to be the Honey Badger. Because you see I simply do not care. I just cannot depend Google for anything other than AdSense, Search, Maps and Mail. You are good at supporting your applications and terrible at supporting my applications. Your developer stuff is so freakishly proprietary and you have no commitment to continuity. I like Amazon a lot – they “get” me – Amazon is my partner – they want me to succeed and get a cut of my success. Google makes me feel like a side of beef – an asset to be managed.

Here is the mail I just got. I am putting it into this blog post so I can gleefully delete it and ignore it – like the Honey Badger would.


There hasn’t been any activity on your Google Apps account for the domain since we sent your termination notice 30 days ago.

Your Google Apps account has been closed.

You can still check or save your data. Just sign in to as in the next 30 days and export your data. If you forgot your username or password, click the “Need help?” link, and we’ll help you access your account.

Your account will be automatically terminated on May 8th 2014. Once your account is terminated, you can no longer access any Google Apps services with this domain name. All of your account data, such as your Gmail messages and contacts, will be permanently deleted to protect your privacy. No one will be able to access your old data by creating a new Google Apps account with this domain name.

Visit the Google Apps Help Center to learn more about closing inactive accounts.

We hope you’ve enjoyed using Google Apps. If you would like to continue using these services, we invite you to create a new Google Apps for Business account.

The Google Apps Team

Altering a UNIQUE Constraint in a MySQL Table

It took me a while to figure out how to drop and recreate a UNIQUE constraint on one of my tables. So I figured I would record the slick little sequence of commands here to help my memory and save me time next time:

CREATE TABLE `t_lti_link` (
`link_id` int(11) NOT NULL AUTO_INCREMENT,
`link_sha256` char(64) NOT NULL,
`link_key` varchar(4096) NOT NULL,
`context_id` int(11) NOT NULL,
`title` varchar(2048) DEFAULT NULL,
`json` text,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`link_id`),
UNIQUE KEY `link_sha256` (`link_sha256`),
KEY `t_lti_link_ibfk_1` (`context_id`),
CONSTRAINT `t_lti_link_ibfk_1` FOREIGN KEY (`context_id`) REFERENCES `t_lti_context` (`context_id`) ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE t_lti_link DROP INDEX link_sha256;
SHOW INDEX FROM t_lti_link;
ALTER TABLE t_lti_link ADD UNIQUE(link_sha256, context_id)
SHOW INDEX FROM t_lti_link;
CREATE TABLE `t_lti_link` (
`link_id` int(11) NOT NULL AUTO_INCREMENT,
`link_sha256` char(64) NOT NULL,
`link_key` varchar(4096) NOT NULL,
`context_id` int(11) NOT NULL,
`title` varchar(2048) DEFAULT NULL,
`json` text,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`link_id`),
UNIQUE KEY `link_sha256` (`link_sha256`,`context_id`),
KEY `t_lti_link_ibfk_1` (`context_id`),
CONSTRAINT `t_lti_link_ibfk_1` FOREIGN KEY (`context_id`) REFERENCES `t_lti_context` (`context_id`) ON DELETE CASCADE ON UPDATE CASCADE

Sweet. I am loving that MySQL magic.

Learning Management System – March Madness 2014

I just produced a bracket for March Madness 2014 that breaks it down by which enterprise Learning Management System each campus is running.

LMS March Madness for 2014.

The Final-4 bis set:

Blackboard: 2
Sakai: 1
Desire2Learn: 1

The story line for the Final Four is almost perfect. In the first round it is Blackboard versus Sakai and Blackboard versus Desire2Learn. It could be an all-Blackboard final or Blackboard could have no teams in the final. This is unlike in 2013 where Blackboard was three of the four Final Four teams (Sakai was the fourth) and eventually won it all. If your team is no longer in the playoffs – simple switch to rooting for a team based on their enterprise LMS.

The Sweet-16 box score was:

Blackboard: 8
Sakai: 4
Desire2Learn: 3
Moodle: 1

Check out my blog post from last year!

We shall see who wins the overall LMS March Madness Challenge!

Joining Longsight

March 17, 2014 was my first day as a Longsight employee. I of course am not leaving my full-time faculty position at the University of Michigan School of Information and I will continue to teach my on-campus and Coursera courses. I am joining Longsight as a part-time employee with the title of “Sakai Strategist”. I will also continue doing consulting work for the IMS Global Learning consortium as I have done since 2008.

Being part of Longsight has a number of wonderful benefits for me. First I have financial support to participate in the Sakai community. While the result of free and open source efforts is freedom for the users and adopters of the resulting products, it still costs money to build high-quality open source software like Sakai. My new support will help underwrite a portion of my time working on Sakai as well as cover travel and support costs for my community activities. The second benefit to being part of Longsight is working closely with my new Longsight colleagues. Longsight has emerged as one of the strongest Sakai Commercial Affiliates (SCAs) and Longsight staff are a critical part of the leadership of the Sakai. Even though my efforts will be as a part-time employee, by being part of Longsight, I will be part of a coordinated effort to both improve Sakai and expand its reach.

I think that the LMS marketplace is at an important inflection point. Much like in 2004 when Sakai and Moodle became the disruptive force in the market that ultimately made the commercial providers better, stronger, and more responsive to customer needs, I think that the market is primed to take its next leap forward.

It is time for all the products in the marketplace to move toward a disaggregated architecture for learning platforms and learning tools. The single monolithic LMS will simply not meet the needs of teachers and learners any more. But all of the major products in the marketplace including Sakai, Moodle, Blackboard, Desire2Learn, Canvas and others have been dedicated to building the world’s greatest monolithic LMS. And frankly, what we have all really been doing for the last 15 years is trying to “out do” Blackboard Learn to one degree or another. Learn was the first and most successful product in this market and in many ways established and continues to be the definition of “learning technology”.

I think that Sakai is the only major LMS activity in the marketplace willing to take a risky step backwards to enable a transformative leap forwards. Sakai is the only effort that is supported by a diverse group of commercial and academic participants. This diversity has its challenges – we cannot raise $60 million from venture capitalists on a whim because we won’t surrender our intellectual property to them. But at the same time, we can collectively take risks.

We are a band of committed friends, colleagues and volunteers spread around the world. We work for a diverse set of organizations. Yet we have found a way to develop a product that has garnered between six and ten percent of worldwide market share. Sakai has been able to compete with well-funded enterprises and hold its own with almost no “centrally controlled” resources (we employ a single dedicated full-time employee). It is a testament to how much more efficient the open source model is than any other model of software development and group coordination. It also points out how much more effective each of us can be when we are doing something that we love.

So what is next? You actually don’t have to look much further than the 18-month roadmap for Sakai-11 that was developed by the community in January this year:

This is the first time we have engaged in a collective planning process with an 18-month horizon. We were scoping the release of Sakai-11 six months before we finish Sakai-10. The Sakai-11 goals are bold and will require a lot of work. My support from Longsight will ensure that I can invest the time I need to contribute to that exciting vision of Sakai-11 and beyond.

In addition to the Sakai-11 roadmap, I will be spending time working on other Apereo open source efforts like building a portfolio system completely outside of *any* LMS and integrating it through standard connections. I also plan to be involved in the Apereo effort to build an open source tool for Learning Analytics that will work with *any* LMS and integrate using standards like LTI, xAPI, and IMS Caliper. And there has not been any mention of an open source Apereo learning object repository or App Store projects – but I think that is only a matter of time.

I am running out of space so I will just mention offhand the flight of LMS users to mobile, the emergence of the EPUB3 standard and its impact on learning, the increasing growth of enhanced e-books as the “Entry Point to Learning”. LMS vendors are not likely to have the agility needed to truly explore these complex and emerging trends fully. But since Sakai has so many people and schools already “playing” with these ideas at the edge – it is completely natural for us to be front and center in these transformative trends.

I see amazing synergy between building new standards in IMS, building reference implementations for those standards into Sakai and then building Apereo learning tools outside of Sakai integrated using those standards.

I think that the combination of Apereo/Sakai/IMS will be energizing to the entire marketplace in very good ways. People, companies, and universities need to realize that an investment in Apereo is an investment in the future architecture of the teaching and learning marketplace. I would love to see Blackboard, Canvas, Moodle, and Desire2Learn join the Apereo community and contribute to various Apereo efforts. One way or another we are all in this together.

I am looking forward to seeing you all in New Orleans at IMS Learning Impact – May 5-8 and in Miami at the Open Apereo 2014 – June 1-4.

Leaving Blackboard

March 7, 2014 was my last day as a Blackboard employee. I will miss working closely with the talented people at Blackboard. The choice and timing of this decision was entirely mine. I just felt that my personal adventure was leading in a different direction and I wanted more time and range to work independently and explore those possibilities. That said I expect that I’ll continue to work with my Bb collaborators in many of the same ways I have been, just with a different perspective.

I am very proud of my two years as a Blackboard employee. Blackboard is a great supporter of open source, Sakai and open standards, and it’s investments helped move Sakai 2.9 towards its ultimate release. Sakai 2.9 was very important because it was the first release that included Rutger’s LessonBuilder that gave Sakai a structured content capability that most see as an essential feature for learning management systems.

Video about LessonBuilder from University of Michigan

I really enjoyed working with the Blackboard xpLor team in Indianapolis integrating xpLor into Sakai’s LessonBuilder using the Learning Object Repository Integration (LORI) API. I was so proud when the LORI code was deployed in production at Indiana for Fall 2013 and later made available to the entire Sakai community when it was included in Sakai 2.9.3. I was also able to invest time to build new portal navigation (along with many others) for Sakai 2.9 that nicely updated Sakai’s look and feel.

Arguably the most significant effort supported by Blackboard was my work on IMS LTI 2.0. Starting in early 2013, it was clear that we needed a reference implementation in a real LMS to compliment the rich tool implementation built by John Tibbets of VitalSource. When a standard is “almost done”, what is needed to push it over the edge into reality are solid reference implementations and a certification suite. So I threw myself into the task and by the end of last summer I had the Sakai LTI 2.0 code pretty much complete. All that was left was to argue through the myriad of tiny details that are exposed when real implementations are built.

Because of my support from Blackboard, Sakai 10 is the first officially IMS LTI 2.0 certified LMS.

Over the past two years, Blackboard has covered my to travel to IMS and Sakai meetings around the world. I greatly enjoyed picking up the tab for my friends Ruth’s Chris steak dinners and Karaoke nights. I am a firm believer that steak and karaoke are fundamental to community cohesion. Letting us have fun together was part of Blackboard’s investment in the success of the Sakai community.

While it is pretty cool to have a job with a company that pretty much pays you to do whatever you want to do, what was really cool was how much my colleagues at Blackboard embraced me and made me feel part of the team. I loved going to BbWorld meetings and just listening to so many smart people who thought so deeply about the teaching and learning marketplace.

That closeness is what I will miss the most as I shift my role from that of an “internal collaborator” to an “external collaborator”. I hope to continue (as I always have) to collaborate through IMS with Blackboard – and the rest of the marketplace – to truly revolutionize teaching and learning with technology. I think that the LMS vendors, working with IMS can craft a whole new world of easy-to-use and seamlessly integrated disaggregated learning functionality. I think that the LMS marketplace will see great change in the next five years. I don’t see the profound innovations coming from a bunch of small startups – but instead the major efforts like Blackboard, Canvas, Desire2Learn, Sakai and Moodle will lead from the front.

When you next meet me at a Sakai, IMS, Educause, SXSWEdu or some other meeting – I will be doing exactly the same thing as I was doing the last time you met me. Playing and exploring new ways to improve teaching and learning with technology and trying to bring people together to work collectively.

Comments welcome.

When Skylab Fell to Earth – Richard Wiggins (1956-2014)

This is a short essay written by Richard Wiggins, who passed away very recently. Rich was my close friend, colleague, and collaborator for nearly 40 years. A memorial celebration for Rich will be held Saturday March 1, 2014 from 12-2PM at the Palmer Bush & Jensen Funeral Home in Holt, MI.

This story from 13 years ago captures perfectly who he was, how he thought, and most importantly what a wonderful writer he was.

Many years ago, Rich was described as 'tall, thin, and full of syntax'.“When Skylab Fell to Earth”
by Richard Wiggins

East Lansing, Michigan — March 23, 2001

So Mir has finally fallen to Earth. We’ve been told for years to expect Mir’s death, but, like Generalissimo Francisco Franco, the space station refused to die on schedule. When I learned of the imminent fiery demise of Mir, I thought back to 1979, when the pioneering U.S. space station, Skylab, met a similar fate.

When news broke that Skylab was doomed, I was a student at Michigan State University. I was out of my dorm room for a few minutes while a friend watched Walter Cronkite deliver the evening news. As my friend and I left for dinner, he commented, “Did you know that Skylab is falling down?”

At the time, my father, Herbert Wiggins, Sr., was an engineer with NASA. Working with other engineers and with astronauts such as Alan Bean, he had helped design parts of Skylab. Dad had given me a large NASA publicity photograph of Skylab, which I had proudly taped to my dorm room wall (nails were discouraged). Unfortunately, the slick walls didn’t hold the photo up very well, so I frequently had to re-attach it.

So I told my friend calmly “Oh, that happens all the time. Why didn’t you put it back up?” Needless to say, he looked at me most quizzically. It took us a few minutes to sort out the confusion. I realized that the space station my dad had cared so much about was dying an early death.

My friend’s reaction paled in comparison to my mother’s. Somehow she persuaded herself that some strange cosmic twist of fate would cause Skylab to blaze a trail straight to a human victim – me. I don’t know what bad karma she thought the family was carrying around. I’m not even sure if she thought in terms of karma; we were Presbyterians. But she was convinced the space station her husband helped design would kill her youngest son.

Dad tried to explain to my mother – he called her “Et,” short for “Ethel” – that the odds of Skylab hitting anyone in general, and her son in particular, were pretty small. But no amount of argument from Dad or me could shake this belief. Finally, Dad found a NASA scientist with a statistical background, who conjured up a sufficiently vivid explanation of the relative size of the planet’s surface versus the size of her son, the target. Nonetheless, when Skylab finally did fall to Earth on July 11, 1979, I’m sure she was praying for me. Thankfully, the pieces that hit land in western Australia brought no harm to anyone.

Dad was as proud of his work on Skylab as anything he ever did, including having landed in Normandy on the early hours of D-Day. He always believed that Skylab could have been saved. He supported a special launch mission to do just that. However, NASA was putting all its eggs into the basket of the new Space Shuttle program. Dad believed a conspiracy to support the Shuttle was killing a perfectly viable space station program; he lamented the unnecessary loss of U.S. space station capability.

Russia launched Mir in 1986. Meanwhile, the U.S. went without a space station throughout the 1980s and 1990s. At just over six years, Skylab’s lifespan was short compared to Mir’s life of 15 years. Mir has had moments of glory (records for human time in space) and moments of fear and embarrassment (fire, collision, and the possibility of general system failure).

Two decades after Skylab’s fall, an aging fleet of Shuttles services the effort to build the International Space Station. Privately, NASA engineers grumble that the Russian contribution has actually slowed down the program. Soon the United States will have a Shuttle program on its last legs, with no replacement in sight — and a space station it can’t claim as its own. Perhaps that’s all an inevitable result of the end of the Cold War, but at least some of the engineers that designed Skylab think there could’ve been an alternative path.

Both my parents were alive back in 1986 when Mir was launched. Mother died in 1987, and I recall her bitter disappointment in the Challenger disaster. Dad passed away last year. He saw the dawn of 2000, but not the new International Space Station. I don’t think it would’ve impressed him much.

Today, 24 hour news channels and dozens of Web sites tracked Mir’s descent. Still, scientists once again had to reassure a worried public. Space analyst John Pike said, “The risk is not zero, but it’s pretty close to zero.” I wonder if the mother of a former Soviet space engineer was worried about her son getting hit in the process. If so, she can put her fears to rest; the Russian space agency managed the spectacular descent precisely – and with no injury to anyone.

About the Author: Richard Wiggins is a senior information technologist at Michigan State University who writes frequently about the Internet.

Here are links to some of our collaborative work

Community Information Toolkit – In 1999-2000 developed a tool kit to get libraries and communities on the Internet. Rich did the overview video and I did the camera work and post-production (on a 100Mhz 486).

An Archive of our Television Shows – Rich and I were on television from 1994-2000 and were the first nationally distributed television program about the Internet. We produced three television shows: Internet: TCI, Nuthin But Net[1], North Coast Digital and were a monthly technology experts on WKAR-AM Newstalk-870 program for many years.

Spectator Drag Racing at Mason, MI – In this less serious video Rich is the camera person and I am the “talent”.

We made a great team. His strengths were a great match for my weaknesses. It was why our collaborations continued over such a long period of time. He will be missed.

[1] Rich was never happy with the television show title of “Nuthin But Net” – because to him it was a misspelled word. :)

Power Outage Notes

These are my notes for how to handle a power outage when I am running my house on generator. I have a small 2500W generator with a 40 minute gas tank and 1000W inverter for the Prius – or for more extended situations I borrow a 7000W generator with an 18 hour gas tank.

I have built two 110V back-feed adapters by taking a cheap power strip cord, cutting it and adding a male end plus a pulled out loop to read amps using a PYLE Meters PCMT20 Digital AC/DC Auto-Ranging Clamp Meter. It is nice to be able to check the amp draw in each circuit as you balance. It is especially nice to catch those startup loads (i.e. like laser printers).

Here are my notes:

Back feed outlets
– #1 Dining room to the right of the back door (light load items + Sump Pump + garage)
– #2 Laundry Room (heavy load items – furnace, HW heater, kitchen fridge, basement freezer)

What to turn off / unplug:
- Washer and dryer
- Laser Printers (these pull a massive surge when they start)
- Sump pump (110V) – leave 12V backup sump charger plugged in (on #1)
- Basement freezer (#2)
- Garage refrigerator (#1)

Note: I don’t have any UPS / major surge protectors – but I would unplug those if I had them. I don’t bother to unplug my power strips.

Small Generator (2500W) scenario:
- #1 runs from Prius with inverter – use only LED lights
- #2 runs from 2500W generator – alternate between

LED Lights:
- Cabinet top and bottom
- Island down lights (2)
- Piano top
- Living Room between sofa and love seat
- Master Bath down lights
- Office desk lamp
- Mud room

Duplicating a Mono (or Single Channel) Track into Stereo in Audacity

This is a really simple set of steps to duplicate one channel of a stereo recording to the other channel, but for the life of me, I cannot ever seem to remember it so I am going to write it dow so I can refer back to it.

My problem is that I use a Zoom H4N Portable Digital Recorderand high quality microphone to record my IEEE Computer Computing Conversations podcasts and so I end up with a single channel in a stereo track with the other channel completely silent.

Here are the steps to duplicate the track with sound to the other track so both channels are identical:

From the track drop-down by the file name "Split Stereo Track

Select the entire upper track by double clicking and Copy (i.e. Command-C)

Move the cursor to the very beginning of the empty track and Paste (i.e. Command-V)

Select both the top track and bottom track (Using click on one track shift click on the other track or Command-A)

From the track Drop-down by the file name select "Make Stereo Track"

Surprisingly simple yet hard for to remember if I do it only once per month.

This web site helped me figure it out in the first place –

Using SSH Tunnel to make my Laptop Appear to have a Real Internet Address

Sometimes I need to have a development version of a Sakai running with a real IP address on the real Internet. For example to run the IMS Learning Tools Interoperability certification I need to have my Sakai accept web service callbacks form the IMS server.

One way to do it is to run an Amazon EC2 instance but this is a pain. I need to login a bunch of times to get all the windows I want and I cannot use any desktop apps. And I need a big EC2 instance and need to install a bunch of stuff – yada yada – and I have all that stuff already on my desktop.

So here is the procedure.

First make the smallest possible Amazon EC2 Instance. Make sure to open port 8080 on your instance. Log in to the instance and edit the sshd configuration file:

sudo vi /etc/ssh/sshd_config

Add or uncomment a line that says this:

GatewayPorts yes

Then restart sshd

sudo /etc/init.d/ssh restart

Then log out of the server and set up your SSH tunnel:

ssh -i .ssh/zzz.pem -R 8080:localhost:8080

You can double check that your server is accepting connections from the outside world:

netstat -ntl

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0* LISTEN
tcp 0 0* LISTEN
tcp 0 0* LISTEN
tcp6 0 0 :::22 :::* LISTEN

In Sakai, you add the following to your


Once your Sakai is up you should be able to navigate to

And viola – everything is running on your laptop but the server is on the internet with a real address.

Procrastination, Late Days, Special Exceptions – Dog Ate My Homework

My Coursera class has started a thread about wanting extensions on assignments. I don’t have complex late day policies- I publish a deadline and don’t move it.

Here is my post to the thread:

I will be honest and tell you that there is no policy that I can come up with that will make everyone happy. Last summer I taught the class and had late days. People would use up all the late days in the first two weeks and then threads like this would start about “we need more late days”, “the software is broken and misleading” , or “late days are a mess – can I have four more?” etc etc. I have agonized over this a lot and this is what I conclude:

Some people procrastinate and some people do not procrastinate. Procrastinating is not bad (I do it all the time). But when you procrastinate – you add risk. The only way anyone misses a deadline by 10 minutes is to have carefully calculated the latest possible time to do the quiz and then something turned out wrong. If the student did the work a day earlier – the time zone or a small network failure or the need to go pick the kids up from day care does not lead to a late assignment.

Those who procrastinate will take any late days and just add that to the deadline and start working right before the deadline + late days – and then some thing goes wrong and they still need an extension.

People who don’t procrastinate – don’t need late days. They have a little extra time built in to cover for little things in the software or important things that take priority in their life.

But I am not 100% anti-procrastination – as I said I do it all the time. If you miss the deadline on a quiz or two – just let it go and keep up from that point on. In the previous three times I have taught the course, one or two late quizzes has *never* been the reason that folks don’t earn a certificate. Those that don’t earn a certificate – miss 50% of the class usually.

At the end of the class I do several pre-calculations of the overall grades and look at those who are “close” – sometimes I adjust the grading if it appeared that a bunch of students who worked hard during the entire class and missed a few points – I will change the grading scheme a bit.

So instead of advocating for adjustments – just make sure the rest of the quizzes are done on time. I assure you things will work out.

I have learned a few things in 30 years of teaching and one of them is that if I start giving individual students exceptions, then it simply means that those students will need even more exceptions in the future. If you can tell me a story about the dog chewing on your cable modem and get an extra week and then word gets around the class – you would be surprised at how many dogs all of a sudden start eating cable modems.

So I just keep it simple with no exceptions and then take a close look at all before I award grades at end of the semester.

Comments welcome.