uStream has launched a new private label live and stored video streaming service, which they call Watershed.

Watershed is a white-label video solution that gives you access to all of uStream’s features and tools, but with your own branding, both in the video as well as the page around the video. Watershed says they can also stream 16×9 and HD content.

They cite education as a potential use, saying:

For colleges and universities the possible ways to use Watershed are nearly endless. Broadcast class lectures and campus speakers both internally and externally…Conduct a live interview with admissions office personnel as part of an open house…Connect with alumni worldwide via on-campus speakers and events…Deliver live broadcasts of athletic games and coaches’ media interactions.

For online education organizations, Watershed can be used to broadcast live lectures and have students ask questions in real-time. In addition, by using Watershed all of the live broadcasts can be recorded for future viewing as well. And don’t forget about Watershed for admissions open houses and alumni events.

For organizations focused on training and teaching, Watershed can be used to deliver seminars, demonstrations, and customer support in real-time. Audiences can ask questions via text and instructors can adjust their broadcast in response to audience feedback.

Pricing for the new product seems straightforward. For under 1,000 viewer hours a month, you pay $1 per hour. The price goes down the more hours you use. If you stream 1,500 hours a month at $0.75 USD per viewer hour, you would pay $1,125 that month. You get 500GB of storage included. You also get access to their API, which is interesting. I would this would be useful if you did in fact want to stream something like a lecture and wanted to make starting up the stream as easy as possible.

Streaming events at uStream is free, but if you really want to have a stronger say over the look and feel of the presentation, Watershed may be for you.

I’ve had good experiences with the uStream platform, as I’ve blogged about here.

qrcodeThis week, Educause released a PDF article about QR Codes. What are these codes? Here’s a snip from the article:

QR codes are two-dimensional bar codes that can contain any alphanumeric text and that often feature URLs that direct users to sites where they can learn about an object or place (a practice known as “mobile tagging”). Decoding software on tools such as camera phones interprets the codes, which are increasingly found in places such as product labels, billboards, and buildings, inviting passers-by to pull out their mobile phones and uncover the encoded information.

These codes, popular in Japan, allow users to use a device, most often their cell phone camera, at a QR Code and be given information, such as a URL to visit or some other information.

While the article deals with the pedagogical uses or these codes, I think there are many possible uses on the marketing side as well.

I think it will eventually be a great resource for prospective students. For example, lets say that tomorrow we send them a postcard telling them the due date for applications is coming up. On that postcard, you include text and a URL for your online application urging them to apply. It requires the user to enter in the address manually.

In the future, perhaps we will send students a postcard urging them to apply with a QR or other 2d barcode image on it. They point their phone or mobile device at it (or hold it up to the camera in their netbook) and they are instantly taken to your application. In fact, I’ve mocked up a sample to show you what that could look like. 2 caveats: I’m not a graphic designer in any sense and the picture is from Selwyn College in Cambridge.

QR Code Example

Click for a larger version.

If you’re tracking your conversions closely, you should know these URLs can contain all sorts of analytics data, so you would be able to get very reliable information about response rates, perhaps better then using other redirect techniques.

While the technology is ready for use today, you may not be at a point where it would make sense to introduce these types of codes. When I think about where mobile technology will be in two years, I think there will be demand for it. Today’s 14-year-olds will be starting their college searches before you know it.

Online, free QR Code Generator
2D Sense, iPhone app that will read QR Codes

Let’s say you’re building a big new web app at your institution. One of the parts of this application will be storing usernames and passwords. There are a ton of ways to do this, but today I want to share with you one way that I do things, in the hopes of making my logins as secure as possible. For our examples today, we’ll be using PHP.

Before I get going too far, I should mention that when I say storing passwords, what we’re really doing is storing a hash of the user’s password. When we authenticate a user, we run the password they supply through whatever algorithm we’re using to encrypt and hash their input and we compare the result to what we’re storing in our database.

That being said, when storing passwords for your app, you have a many options. You could skip all security and store your users’ passwords in plain text in MySQL. Bad idea. You could use MySQL’s default password functionality. This is okay, but you could do things better.

For the rest of this post, let’s create a password variable, $pass. For all the examples, let’s set the value of $pass as “highedwebtech1”.

Let’s look at what’s generated when we pass the $pass variable through MD5.

echo md5($pass);

That gives us the following hash:


That’s not a terrible way to store a password, but there’s been research for the last couple of years that its possible to create MD5 collisions – where you generate lists and lists of MD5 hashes and look for matches. For example, this site will look up your MD5 hashes and check for collisions.

Well, we could use SHA1 to encode the password. Let’s run our $pass variable through SHA1:

echo sha1($pass);

That gives this:


Getting better. But – SHA1’s been broken as well. The chances of your user accounts being brute-forced by someone running SHA1 collisions is very minute, but let’s keep searching for something better.

Let’s do some crazy hashing and mashing. Let’s look at PHP’s crypt function.

crypt() will return an encrypted string using the standard Unix DES-based encryption algorithm or alternative algorithms that may be available on the system.

If we run the following code:

echo crypt($pass);

We get the following:


crypt() also allows you to add a salt. Wikipedia describes a salt thusly: “a salt comprises random bits that are used as one of the inputs to a key derivation function.” This basically means we can specify some characters that will become part of our encryption scheme.

Let’s create a $salt variable. We’ll give $salt a value of, for now, “yummysalt”.

Let’s run crypt() again but this time we’ll specify a specific salt. The system I’m running this on in these examples is using standard DES as its encryption.

echo crypt($pass,$salt);

This returns:


Standard DES puts the first 2 characters of the salt at the beginning of the hash of the password. If we use “yummysalt” as our salt (footnote – DES only uses the first 2 characters, we could have just made our salt “yu”), every time we run our password through crypt we will get the same value. The number of characters in your salt can depend on your system settings, including values in PHP and your server software.

Specifying a salt isn’t a bad thing to do, but you’ve got to now store that salt somewhere in your code. If your system is compromised, and with your salt, cracking passwords may be a little easier for your user passwords to be cracked.

If you’re sensing a theme here, you’d be right. DES is also susceptible to cracking, even when using a salt.

So, what’s a way to do it thats secure and has little chance of getting cracked? There are a lot of different ways to answer that question, but here’s some ideas I had, along with some help from a friend, who’s a security professional at a major research institution.

He recommends using something like the following, which is based on the username and password responses we receive from the user.

$username = "user1";
$password = "highedwebtech1";

echo sha1($username.$password);

In the code above, we’re creating a hash from a concatenation of the username and the password they enter. But, Mike, you say, a few paragraphs earlier you said SHA1 wasn’t the best choice. In this case though, we’re not hashing just the password. We’re hashing an entirely new value, in this case, user1highedwebtech1. That would be much more difficult to crack, especially using a brute-force attack. Here’s the hash value we get back from this function:


It’s long, and difficult to crack. When it comes time for a user to log in, checking against what they enter is easy. Just put the two values together, run it through SHA1 and then compare that to the value we originally stored in the database.

It should also go without saying that you should never email a user’s password to them. Either send them a replacement, temporary password or make them reset it altogether by emailing them a link with a hashed value they need to reproduce. But that’s a whole other post.

Want to learn more about doing this stuff in PHP? I’d recommend reading about about the mcrypt module. It offers a great deal of additional functionality.

Happy hashing!

What tips or tricks do you use when it comes to handling passwords? I’d like to learn how you deal with this issue.