Monthly Archive for May, 2006

Microsoft, Carrion

I was reading some Free Software-related interviews tonight, and I came across this article about how Novell hired Jeremy Allison, the lead developer of Samba.

Samba, for those who don’t know is a piece of software that lets non-Windows computers share files with Windows computers. That might sound boring, but what actually makes it kind of neat is that Samba on Linux is a stabler, faster, more secure platform for serving files to a buch of Windows machines than Windows itself. This got me thinking.

When we think about Microsoft, The Monopoly, we think about how they swoop into markets (like the web browser market) and decimate the competition. We think about the tens of billions of dollars of cash they are sitting on.

But what if we think about it a different way… maybe–as is the casewith file sharing–Microsoft is actually getting spread too thin. They don’t have enough focus devoted on these issues to compete effectively. Maybe they have their hands in too many cookie jars, and they are going to get picked apart by vultures.

Free software vultures.

With talons.

People talk about Free Software and how much duplication of effort there is–Gnome and KDE, for example–but perhaps this is actually one of Free Software’s greatest strengths. Because GNU/Linux is made up of so many pieces, each of which is maintained by an independent group of developers, people are forced to really compartmentalize things well. That means you can have several web browsers that all compete for users, and they are all interchangeable. Doing things this way means that market forces drive innovation within the Free Software world.

Microsoft only has one web browser, and within the company it has no competition, nor could it. It’s tied deeply to the operating system. That’s how Microsoft ensures lock-in, but it also might be what prevents Microsoft from competing at full force with Firefox.

Food for thought.

Capstone… nearly complete

I am presenting my Capstone tomorrow… the final piece of work I need to do to complete my degree. It’s the culmination of many months of work, and I’m excited and relieved to be finished.

Well, nearly finished. I need to run through my presentation before I go to bed, and I have a few things to print out tomorrow, but hopefully as of about 2:00pm tomorrow I will have completed an M.S. in Human-Computer Interaction Design.

There’s a lot I want to write about, and I feel bad that I can’t jump right into my Summer of Code project, but these tihngs will happen in due time. For now, you can read the web site I made for my capstone project. It describes everything in detail.

I’m particularly proud of my poster. I think it’s pretty.

Google, Pimp

I was accepted to Google Summer of Code! I really want to write more about what I’m going to be doing and I really want to get started….

… but I am presenting my Capstone in two days, and that’s occupying a rather large slice of my attention.

So, good news. I have a job for the summer. I’ll post more soon.

Google Whore

I just noticed that this site is #1 when you search Google for snowed in. That’s right, I beat out Hanson’s 1997 Christmas album by the same name.

Mmm-bop… mm-bop bah…

Piaget

I am trying to finish up my BusyBodies paper, and I came across a neat passage in an article by Seymour Papert about Jean Piaget:

In one of his most famous experiments, Piaget asked children, “What makes the wind?” What follows is a typical Piagetian dialogue:

Piaget: What makes the wind?

Julia (age 5): The trees.

Piaget: How do you know?

Julia: I saw them waving their arms.

Piaget: How does that make the wind?

Julia: Like this (waving her hand in front of Piaget’s face). Only they are bigger. And there are lots of trees.

Piaget: What makes the wind on the ocean?

Julia: It blows there from the land. No, it’s the waves.

Piaget recognized that Julia’s answers, while not correct by any adult criterion, are not “incorrect” either. They are entirely sensible and coherent within the framework of the child’s way of knowing. Classifying them as “true or false” misses the point and shows a lack of respect for the child. What Piaget was after was a theory that could find in the wind dialogue coherence, ingenuity and the practice of a kind of explanatory principle (in this case, by referring to body actions, in other cases much harder to state) that stands young children in very good stead when they don’t yet know enough or have enough skill to handle the kind of explanation grown-ups prefer.

Piaget was not an educator and never enunciated rules about how to intervene in such situations. But his work strongly suggests that the automatic reaction of putting the child right may well be abusive. Practicing the art of making theories may be more valuable for children than achieving meteorological orthodoxySeymour Papert

The emphasis at the end is mine. Kind of a neat thought.

Cake Factory!

This is exciting: I have my first working prototype of BusyBodies. And it’s now at the point where a non-computer geek can start to see what it is. So, check it out:

Video

I realize it’s all just red, white, and blue boxes, but just imagine: you’re in a cake factory. There are strawberry cakes (the red boxes) coming down the conveyor belt. You need to get them into a box, but all you have are two dumb robots: a Button Pusher, who just pushes buttons all day, and a Shover, who shoves things when his button is pushed.

How do you get the cakes into their box?

Well, that’s a pretty easy example, but it’s only level one. In level two you have to sort cakes according to flavor, and in level three you have to start doing inventory management. But all of the levels will work vaguely like the video above. No code necessary, but you’re sure as heck programming.

No, seriously. Free phone service. To real phones.

Skype announced today that they are offering free phone calls from Skype users to any phone in the US and Canada through the end of the year. That means that if you have Skype phone, you can make long distance calls from your home to any phone in the US.

If you have a Wifi Skype phone, like the upcoming NetGear Skype Wifi Phone, then you can make free phone calls on what is essentially a cellular phone anwhere you can get Wifi access.

Like, say, San Fransico.

Or downtown Bloomington.

Legitimately free wireless phone service. I have half a mind to pre-order one of the Netgear phones myself. I’ll pay about $250 to Verizon after my contract ends in July. To have a Wifi Skype phone for that period would cost me $250 for the phone plus about $20 for a SkypeIn number. That’s pretty competetive.

Starting in January, I’d have to pay long distance fees with Skype. But even if I use 1000 minutes a month (I don’t), at $0.02/minute, that’s only $20/month.

The downside? The Wifi network is less than spotty. It wouldn’t be a question of “do I get service here?” it’d be “where can I get service?”

I think this is remarkable, though, as part of a larger phenomenon: the commodization of information transfer and storage. Amazon S3 offers online storage on an as-you-need-it basis. You can keep about 10 gigs of stuff on S3, access it regularly, and pay only $2-3/month. With Lulu.com you can publish printed works for free. People can buy your nice, bound novel for $12.99. No publisher necessary. YouTube will let you distribute digital media for free, and of course with services like Blogger or Wordpress you can publish them and syndicate them on Technorati or if you’re good enough, on Google News.

What this adds up to is that you can move any kind of information anywhere you want to any number of people within the network for nothing (sponsored by ads) or next to nothing. I’ve got opinions about what effects this might have, but that’s another blog entry.

By way of explanation

I’m really enjoying doing test-driven development. For those of you who don’t know what that is (and care to learn), test-driven development is a different way of writing software that makes it easier to track down bugs (defects) in your software.

That sounds boring, but it’s really not. Imagine I want to write a bit of code that takes a photo and makes it awesome. Traditionally, one might start by writing some code:

function MakeImageAwesome(Photo)
 {
     Load(Awesomanator);
     Awesomeanator.PrepareImage(Photo);

    etc...
 }

With test driven development, before you start writing any code at all, you write a test that checks whether your not-yet-existant code works:

[Test]
TestAwesomeFunction()
{
  PhotoOfErik = Flickr.GetPhoto("Erik's Self Portrait")
  AwesomePhoto = MakeImageAwesome(PhotoOfErik)

  Assert.IsTrue(AwesomePhoto.IsReallyAwesome)
}

This way, I can run the test, and see that no… my function is not yet making the photo of me awesome. Then, and only then, do I start writing the awesome code. As I am writing code, I can continually check my progress.

This might seem trivial, but it makes a BIG difference on big development projects. You end up with thousands and thousands of little tests, so if you accidentally break something that used to work, you know right away. And something is not working, you can narrow it down a lot more easily: all the tests that pass are obviously NOT the problem.

The real kicker is that when you do discover a bug, despite the fact that all your tests are passing, you don’t start fixing the bug. You start trying to write a test that would expose the bug. As soon as you get a test that fails, you start writing code to make it pass. That way, you know when you’ve fixed the bug, and you know that if it ever comes up again, you’ll be aware of it.

The only thing that is making this process less fun is that Nunit is constantly crashing on me whenever it reloads my project. I have to close it and reopen it each time. That’s obnoxious.

But seriously: I heartily recommend this approach for anyone who is writing any kind of code. I’m finding it really valuable even on small scale things.

How do I get to work church?

Some small part of me feels like the fact that the busses don’t run on Sundays is a violation of my right to free religious expression.

I think it’s the whiny part.

It looks like a game!

It’s an exciting day! Today I finally created my first two BusyBodies. They are the Button Pusher and the Shover. The Button Pusher can push the Shover’s button. They work well together:

Video

And they work well onscreen! I realize it requires some imagination to see these as robots in a cake factory, but… that time will come. I’m just excited that the basic gameplay for BusyBodies is actually working!