Jeopardy, Artificial Intelligence, and a Chess Playing Robot

Tomorrow Jeopardy will feature a computer facing off against former champions Ken Jennings and Brad Rutter.  I have been looking forward to this for a couple of months since I first heard about it, and it is an amazing feat of computer science that a computer can go head to head with humans on a game show as complex as Jeopardy.  IBM is the true leader in feats (stunts?) such as these having staged previous competitions against former chess master Garry Kasparov.  The show has already been filmed (in a special sound stage at IBM’s location) but I do have an inkling of what the engineering team probably went through prior to the event.

Artificial Intelligence

My freshman year in college, I managed to convince my professors that I could and should skip the computer science prerequisite for everything, COS120.  This put me into a data structures course in the first semester of my freshman year, and several linked lists and b-trees later, I was able to take any class I wanted in the spring.  I made  bee-line for a class called “Intro to Artificial Intelligence” as I was more than intrigued by the possibility that I could build Skynet and cause the human race its final doom.  Sweetening the pot was a rumor circulating the labs that the class would make use of the very recently released Lego Mindstorms.  Fulfilling the dreams of nerds and lego aficionados (with there being an admittedly strong correlation between the two groups) the Mindstorms were fantastically expensive to a college kid (several hundred bucks) and required programming knowledge to really make them hum along.  This AI class in other words was my ticket to Lego Nirvana, not the other way around.

Legos and LISP

I managed to sign up for the class and was one of (I think) two freshman.  Having spent high school and the fall semester doing work in C and C++ along with learning Perl and a new fangled language called PHP, it was quite a surprise to show up for class and begin learning LISP.  For those of you who are non-techies, LISP is a complete paradigm shift from how most programming languages allow you to express yourself.  The analogy might be like going from sketching in black and white to being handed multiple colors of modeling clay and being told to sculpt in three dimensions.  LISP is the oldest programming language still used in a mainstream capacity today.  LISP treats data and the program the same, so you can build a self modifying program which is one of the reasons Artificial Intelligence researchers and applications use it so much.  LISP has a weird looking “list based” syntax (LISP stands for LISt Processor) and allows you to solve weird problems in fairly elegant ways.  In fact, some like it so much and feel it is so powerful that LISP is the reason that Paul Graham (a well respected computer scientist and technology entrepreneur) credits for his business success. He felt he was able to elegantly and more efficiently out-build his competition simply because of their language choice.  I don’t really agree with Graham, but the point is that LISP is a very cool and very different language that was a pleasure to learn.  This class remains the only one in college where I did every single homework assignment.  The problems were just too fun and the ways of solving them were extremely different. Along with LISP of course came the Legos.  Almost immediately, we began building simple Lego robots that would following a line on the floor, be able to navigate a room, follow a light source in a dark room or navigate a maze.  It was unbelievably cool and a testament to Lego’s design prowess that their system allowed for such flexibility.  Each kit provided a command unit and several motors and sensors.  There was a touch sensor, light sensor, and a few others, and the command unit would download the programs via a cable hooked into a computer.  There was a Lego provided GUI-based way you could program the processor, but hackers had already provided several other languages, and we used Not Quite C (NQC) which was very similar to the C programming language with a few restrictions.

A Chess Playing Robot

All in all, we were having a blast, and just like kids get bored with a slide and start daring each other to go down backwards, or standing up, we began competing to build a bigger better robot.  Our professor was also the chair of the department, and he sensed he had something brewing, so he got the class together and challenged us to come up with a project that could bring fame and glory to our small liberal arts university.  A robot that could get us soda from the machine!  A robot to gather up homework assignments and drive them back to the professor!  Not as popular as the food or waiter suggestions.  Finally from the back of the class came the ultimate idea: a chess playing robot!  A senior in our class had been working on an independent study in addition to taking this class, and had produced a fairly workable Chess simulator, written in LISP.  The class began buzzing with excitement.  We could build the robot, then challenge students to beat it! I started to get a bad feeling about the project – building a Lego chess playing robot would be quite the undertaking.  My good friend Aaron Williamson upped the ante – “I could get the university TV station to film a match!”  Uh oh.  A third student offered to get one of the most popular professors in the school to face off against the robot, and just like that we had ourselves our very own TV spectacle: Man vs. Machine.  Nerds vs. Normals.  Technology (us) vs. Philosophy (the professor).

The work was divided up and we immediately had to start pulling late nights as we only had a few weeks to get everything together.  There would be a vision processing team (the robot had to know where the chess pieces were), a robotics team which would build the gantry crane and arm mechanisms, and the chess software team.  The Public Relations we soon learned, would take care of itself.  I was on the vision team, and our job, we felt, was quite possibly the hardest.  This was 2000, and web cameras were novel, low resolution, expensive, and rather rare.  At least, they were expensive for college students, so we used the only one we had available: a web camera attached to a Silicon Graphics O2 workstation that provided a 640×480 resolution color picture.  It provided enough resolution so we could film the board, and our algorithm would take one picture, save it, then take another after the human moved, and compare them to determine which two pieces had moved.  This seems pretty trivial, but it was complicated by a fisheye effect from the lens, and the fact that the robot arm (or human) wouldn’t actually place the pieces very accurately. Lighting and other conditions could also change depending on where the human was standing or for a host of seemingly random factors. As we started to work, even simple things seemed to derail us.  Silicon Graphics apparently used a proprietary RGB format which was reverse of standard RGB, so we had to write a converter.  Irix, the SGI OS, turned out to be a pain to develop for, at least compared to Linux, so we performed the processing on another computer.  This meant we also had to set up the workflow between the IRIX machine which captured the image, and the Linux machine which processed the image, and then interface with the robot and the chess playing program, which ran on another machine. The date for the campus wide demonstration was looming, and we were determined to not be humiliated.  The student newspaper ran a feature, and our opponent was quoted that “no hunk of metal would best him” to the delight of the student body.  

Media_httpwwwpeebsorg_gamba

Finally, the day was upon us, and we began preparing the lecture hall which would be ground zero.  We had lots of equipment to move from our basement computer lab to the lecture hall, and as we began calibrating everything alongside the film crew which was also setting up, we noticed that the vision system wasn’t working.  At all.  It couldn’t find the edges of the board, couldn’t determine the grid, and it couldn’t see which pieces had moved.  We were in trouble – the fluorescent lighting conditions of the basement worked but the incandescent lighting and TV lighting in the lecture hall didn’t and we needed to recalibrate everything.  Working like mad we began tracking down all intensity assumptions in our program and moving pieces around until finally we got it working. The format of the competition was designed so that while the computer was thinking we’d explain to the audience what was happening, and our opponent would also discuss the philosophical ramifications of sentient machines.  This was designed for another, secret reason – if something went wrong, we wanted to be able to troubleshoot without drawing too much attention.  We had a backdoor programmed into the chess program which could reset it if there was trouble, or in the event of a catastrophic failure, we could take over and manually play out the match.  The ethical dilemma of should we tell the audience what happened if that were to come to pass was hotly debated.

The clock struck 7:15, in came the audience, and on came the red blinking lights of the video cameras.  The lecture hall was packed out, and the professor did a great job making jokes as we introduced the event and briefly explained the rules.  Our class professor could have died of happiness at that moment.  As we began the competition, the professor picked white and made the first move.  “Take THAT you cold calculating MACHINE!” he proclaimed to resounding applause from the audience.  That pissed me off.  I had been championing a feature where the robot would insult and taunt its opponent with every move, but was shouted down for not being classy enough.  We had to endure a night of insults that could have been combatted and we all admitted in hindsight that we should fought fire with fire. At first, everything looked like it was going well.  The robot was working, it could see what was happening, and the chess program was making good decisions.  We started to relax a little, and the audience was clearly intrigued as the gantry crane would slowly move to the right spot, lower its arm, then grab the piece and move it.

Then disaster struck.  Just a few moves in, our opponent performed an En Passant which while being a rather esoteric move, also has the rather interesting distinction as Wikipedia puts it, as “the only occasion in chess in which a piece captures but does not move to the square of the captured piece.” Uh oh.  Our vision system was designed to look for what changed and was looking for either a move or a capture, not a weird combination of both.  Our program chose the two best coordinates to send which caused the chess program to have the wrong board information, and we watched in horror as the gantry crane moved into the wrong position, knocking over several pieces as it vainly swiped in air to make its move. “Uh oh, Houston, LOOKS LIKE WE HAVE A PROBLEM!” yelled our opponent as the crowd roared its approval, and he immediately launched into a discussion about how pure logic will never overcome the malleability of the human mind. It was chaos as we raced to reset the board, recalibrate the vision system, and instruct the chess program of the true state of the game.  I believe we had to simply reset the game state completely, in essence telling the computer that the game had started with the board situated the way it was since it didn’t understand an En Passant.  Things were looking up as the computer managed to make a move and actually captured a pawn to the crowd’s approval.  

For the next fifteen or so moves we each took turns giving a short talk about how the robot was built, the technologies we used, and the challenges we overcame. As the evening wore on, the game developed nicely.  I’m not a chess player but I could tell that the computer was holding its own and it could already beat everyone in the class, so we were optimistic about our chances.  Still, it was roughly an hour into the game and even though I wasn’t following every move closely it was a surprise when all of a sudden the professor announced “Checkmate!”  I looked over at the board and it was indeed checkmate!  However, the computer didn’t agree.  Turns out that either during the initial setup of the board or during the insane scramble to fix our En Passant adventure, someone had incorrectly placed the King and Queen on the computer’s side.  The computer had been defending its queen instead of its king, and thus had fallen prematurely. A disappointing end to what would end up being one of the most memorable projects of my college career.  Still, we couldn’t help but feel proud of being able to build something unique and stage a public spectacle of sorts that everyone seemed to enjoy.  Tomorrow as I tune into watch Watson and the team from IBM, I have a small sense of how they’ll be feeling, and win or lose (there are already rumors leaking out as to the results) it is an incredible achievement.  Congratulations and good luck!

Postscript:

Google is Getting Copied! So What?

There’s been an uproar (at least in tech circles) over the past week about allegations from Google that Microsoft’s Bing search engine was copying results from Google’s offering.  There goes Microsoft again, being evil!  There goes Google again, being good!  At least, that’s the popular sentiment.  However, the whole thing struck me as bizarre.  Technology companies have for years copied each other’s offerings, putting minimal twists or variations in their own products:

  • Microsoft Windows copies Apple’s MacOS.
  • Lotus copies Visicalc (the first spreadsheet).
  • Google copies every search engine in existence when they start.
  • Google’s Android OS copies Apple’s iOS.

Now, most people would respond that this isn’t the sort of detailed copying that Google’s objecting to.  Macro-copying of a product or service is OK – that’s just old fashioned competition.But what about copying a particular feature?  That seems to be OK by Google as well:

These were both good ideas, and were major differentiators from a user’s perspective for Bing.  Bing’s attractive backgrounds before starting a search were a classy very non-Google approach to take that immediately set it apart from it’s main competition.  Google felt like copying it was not an issue at all.Macro copying of an entire service or product line is OK with Google.  Copying specific features is OK with Google.  Maybe Google has an issue with the specificity of Microsoft’s copying.  They don’t like the very precise manner with which Bing lifts its results.  Still, Google has done this before as well when they copied Yahoo’s marketing in an almost pixel perfect ripoff.

Now, my example provided above is admittedly much smaller in scope and much easier to have happen accidentally by some ill-advised graphic design intern, but I think it’s ridiculous to post about Bing copying Google when it’s a fact that all search engines routinely spend significant time analyzing their competitors.  Google has plenty of research and monitoring directed towards Bing, Yahoo, and others, otherwise how would they have known Bing was swiping their results?  In other words, we’re back to the copying that Google is comfortable with – a little higher on the food chain, a little more abstracted.

What Bing and Microsoft are doing is certainly dirty, and annoying.  But it’s also stupid, lazy, and incredibly shortsighted – they might be improving their results temporarily but now they’re struggling in a PR battle they’re sure to lose.  They’re also not working on improving their own rankings or understanding why Google’s results are what they are.  Still, I can’t help but feel Google’s righteous indignation is a little over-the-top on the eve of it releasing several major copied products: its Facebook killer, Honeycomb (the tablet version of Android), a Groupon killer (Update: A reader provided this link showing an almost perfect ripoff from their beta site), and many more.

Iteration is part of competition, and the way to beat a competitor (especially one who copies a little too closely) is to keep iterating.  Google exposed Bing, but I can’t help but wonder if they should have just ignored the whole thing, chuckled to themselves, and kept working.  I wonder how many millions went over to Bing and tried it after this announcement.

Some Quick Thoughts on the Kindle

I got an iPad for Christmas.  For me, it was a relatively simple decision.  I fly/travel a lot and was burning a lot of space carting books around, especially newer hard cover books.  I also already use an iPhone 4G and have been extremely happy with the platform and device, so I was excited to see a lot of my favorite applications make their way to the iPad.  Essentially, I was looking for an eReader that had good battery life (at least 8 hours) which would provide flexibility to do other things.  This ruled out the Kindle eInk device and the Nook but I felt like the Kindle bookstore was more mature, had better selection, and was more portable (available on more devices).  All of my iPad reading is done with the Kindle application.The Kindle application ecosystem has gotten a lot of things right.

  • The highlighting is a killer feature.  Read a book, non-destructively highlight it, view your highlights on kindle.amazon.com.  This makes note taking SO much faster, easier, and portable.
  • The device syncing is fantastic.  I generally will read on the iPad most places but read on my phone if I’m biking at the gym.  The iPhone app syncs up where I left off and I don’t have to think about it.  Yes, this is a little feature and an obvious one, but it makes a big difference.
  • The book selection is very good.  Only when I’m trying to find more esoteric books is it a problem, and then I dutifully click “Tell the Publisher”.  Amazon should give you an email when it becomes available, but they don’t seem to do that right now.
  • The desktop applications are nice and consistent with the mobile applications.
  • The one-click buying is ridiculously convenient, and the books downloads almost instant.
  • Page turns are instant, and pleasant.
  • The built-in (and offline) dictionary is used a lot more than I thought it would be.

The Kindle software needs to improve on a few things:

  • I can’t find a good way to export all of my annotations in plain text.  I’m wondering if this is some sort of DRM policy to prevent people from highlighting the entire book (which I haven’t tried) then exporting it.  Anyway, I have to copy and paste my highlights directly from the web page right now which is not the end of the world, but is annoying.
  • It’s super annoying that the iOS Amazon application doesn’t include the Kindle eBook store.  You have to use your web browser to hit the store and purchase a book.  It literally does not exist within the mainline iOS Amazon app.  Search for a book there and it won’t show you if it’s available on the Kindle.
  • Their DRM policy is really stupid.  This is something everyone says to me when I mention I use a Kindle.  Almost all DRM complaints would go away if Amazon let you do an time unlimited lend of a book to another account which prevented you from reading that title while it’s lent out.  Currently they let you do one lend (total, ever, never to be lent to someone else after that one-time lend) for up to 14 days.  Stupid, stupid, stupid.  My response to those complaining about these restrictions is that it’s relatively simple to strip the DRM, and just like that, Amazon is only hurting it’s paying customers and providing an incentive not to buy and to pirate.
  • The Kindle app should start supporting every file format out there that’s available.  I know they’re starting to do this, but seriously, what’s the holdup?

Things I’m unsure about / haven’t tried yet.

  • It’s unclear to me how PDFs work.  I’ve got a bunch that I’d like to have for reference, etc., and locally manage (or access via Dropbox), and you can’t just drag a PDF into the app and have it show up on your device.  Very annoying.  I get that there’s some sort of post-processing that needs to happen for eInk devices, but it seems like this could all be easier.  Maybe you could post-process yourself on your desktop app and save everyone the trouble.
  • Haven’t done much note taking.  I’ve found note taking to be almost unnecessary when you can just highlight content and move on.

Parting ThoughtIf I was involved in an eInk company today, I’d be doing everything I could to bridge the “tactile gap” that still exists for most people.  The Wife has emphatically stated that reading for her is half tactile.  She likes the page turning.  The physical pages.  The weight of the book.  The smell.  She’s like an alcoholic who loves everything about the experience: the glass, the ice, the sound of the pour, the smell.  It’s easy to dismiss this as a triviality but it’s going to be a long-term battle for the next twenty years at least.  The company that can make an eInk page that feels like paper inside a book with pages to turn might have a shot at interesting these people.  Nice leather cover, plenty of pages (a thousand?) to accomodate 95% of books out there.  Pages to turn, etc.  It’d be like the book lover’s smokeless cigarette.Maybe I’m just out to lunch, but I’d love to see a double-blind study with a well-worn eInk “book” compared to a normal book and see if people could tell the difference or would care.

Christmas – a Time of Giving

Normally around Christmas people are focused on giving.  Giving to family, friends, maybe even coworkers.  Some give time to charities, some make donations to others.  One of my annual traditions for Christmas is giving to the Electronic Frontier Foundation (EFF), a digital liberties organization that fights for freedom of speech online, privacy, and other causes that are generally too technical to garner attention from other organizations.

This year I’m adding a very similar organization to my annual Christmas list, Software Freedom Law Center (Hi Aaron!),  which similarly advocates for issues that increasingly plague and impact our lives, whether we understand them or not.With all the buzz going on right now about Wikileaks maybe you’ve thought about these issues a little more than normal.

Depending on your understanding of the issue or political orientation, it might be hard to believe, but freedom of speech online is a relatively fragile thing.  Maybe it’s because technology appears to be finite and controllable, maybe it’s because online speech travels much faster and is easier to consume, but it seems that governments and governing bodies tend to naturally flock towards the idea of speech regulation of technical mediums.Groups like the Software Freedom Law Center and the Electronic Frontier Foundation work to preserve freedoms on our behalf.

When I say “freedom of speech online” or “freedom online”, we’re also talking about fighting against overly broad software patents, violators of the GPL, warrantless wiretapping of online communications, and a whole bunch of other issues that may seem only tangentially related to speech, but do impact your voice online.In addition to the work they do, I’ve had the privilege of interacting with and knowing a few individuals from both organizations, and they’re great people as well!  So Merry Christmas, and if you’re looking for a great gift idea or a cause to support, check out both groups.

Thinking Like a User: The Bank Analogy

Like every software organization, we have trouble getting our developers how to think like users.  It’s a time consuming process, and when you’re in an industry like healthcare, it can often be extremely difficult to visualize exactly how a product is going to be used or how a process might affect a user.  You’ve certainly never been to med school, or worked in a pharmacy.  These things are utterly foreign.  However, visualizing a user’s workflow or responsibilities is often the difference between a mediocre product and a great product.One method that I’ve found to be illuminating to our engineers is to restate every message, function, or process in terms of a bank, with them playing the user character.  Instead of the error message being “Purchase Order Alert: We’re sorry, but there were one or more items missing from your recent purchase, click here for more details“, rephrase it as “ATM Deposit Alert: We’re sorry, but there were one or more checks missing from your recent deposit, click here for more details.“Makes a difference doesn’t it?  Now our verbose, overly-polite alert text seems almost ridiculous.  Tell me what happened with my checks! Don’t make me click through for more detail!  Especially if I’m on a mobile device!  That’s my money and it’s important!“ATM: 1 check for $100.00 was returned.”That’s much better.  I feel notified and in control as a user, and it was short and sweet.  Very cellphone friendly.“Order 123: 1 item shorted: Tylenol 20MG”The point is that users actually use the products we build.  Things like error messages and process flows are important.  As developers, we often think of these things as control points, or logic trees, and don’t stop and relate what’s going on from a user’s standpoint to any of the important systems or applications that we ourselves use.  The bank analogy should help you get in the habit of stepping aside and thinking outside your code for a bit because it pulls the process or message into the realm of your experience.Even the process of constructing the analogy can be very instructive.  If you can’t quickly pull together an analogy that describes what you’re doing in terms of your own life, you probably have no clue what you’re doing.  In other words, you’re probably doing it wrong.Next time you’re solving a problem, try restating it using concepts you’re familiar with in your own life.  You might be surprised at how useful this technique can be.Updated: Sunday, 12/5/2010Today’s New York Times Magazine had an article on Jamie Dimon (I think it requires registration) that talked about his management and conversational style.  One of his favorite things to do was equate banking principles back to ordinary life.  Seems like we’ve got company on the other side of the fence too!

An Open Letter to Mint.com: Stop storing my bank credentials!

A lot has changed over the last few years.  It seems like forever ago, and yet, it was only in 2005 that AJAX sprang forth and ushered in the buzzword of Web 2.0.  And it’s great – rich applications that are delivered quickly and efficiently allow me to do things online that I never thought possible. And yet, there’s a dark side to the Web 2.0 craze for APIs and tools and importing and exporting data, and that is that we’ve taught our users to embrace man-in-the-middle attacks.  Every time I see a website asking me for my Facebook password I cringe, but nothing pales in comparison to the nightmare that is Mint.com.

I love Mint.com.  They have spectacular visual design, a great product, an entertaining and informative blog, and a great iPhone app.  I know tons of people who love Mint.com, and yet, when surveying my digital life with a critical eye, I know of no greater security risk than Mint.com.  It’s still astounding to me that Mint could grow from a small startup to being acquired by Intuit in the space of a few years and essentially retain unlimited liability by storing user’s logins and passwords to their entire financial lives.  Yikes. 

If I were turned to the dark side, I would immediately attempt to hit Mint for their millions of users credentials which provide me completely unfettered access to their accounts, most of which are not FDIC insured.  This means that when someone hacks Mint, they’ll be able to pull out all of my money, transfer it, etc., and I’ll be responsible because from the financial institution’s perspective they aren’t liable for me entrusting my credentials to a third party. Sure, Mint encrypts their password database, but somewhere that password is known or stored.  It has to be because they have to use my unencrypted credentials to login.  Sure, there are a bunch of ways they could monitor this access and mitigate risk, but at the end of the day there are usernames and passwords floating away.

There is simply no technical reason the financials institutions out there can’t work with Mint and every other API providers/consumers out there can’t implement an OAuth authentication solution.  For the nontechnical of us who are reading this, an OAuth solution is essentially a token based method of authentication.  A key based authentication mechanism doesn’t necessitate handing over your username and password to a third party, instead, you grant a key (and depending on the API, limited access) to Mint which can then login and grab the information you need.  If Mint gets compromised, your financial details might be stolen, but at least they can’t access the upstream account with the same type of access.  In fact, this is what I was really hoping would come out from the Intuit acquisition: for Quicken you used to have your financial institution give you a separate login or key for Quicken specifically. To be clear: this is originally the financial institution’s problem.  They should be providing OAuth based services for Mint and  others to consume.  However, this has now become Mint’s problem to address.  Also, hindsight is 20-20.  What may have started out as a great application for a developer to track his personal finances with an acceptable risk quotient has ballooned into one of the largest and best avenues for tracking finances in the world.

The simple fact is that today, when you change your financial institution credentials, Mint breaks, which means they’re scraping the content from financial institutions.  Financial institutions are in on it too – it should be easy to see that a large percentage of their traffic is coming from one domain.  Even those sites that use a two-factor “security questions” approach are accessed via Mint by saving all possible security questions!  Financial institutions could easily block Mint by adding CAPTCHAs to their login protocols, but since I personally know several users who have changed banks to use Mint, my guess is there’s sufficient pressure to maintain Mint’s access. Some might say that I’m being overly paranoid because we’re used to saving usernames and passwords on our local machines and while it is true that from a direct comparison perspective Mint probably has the security edge over my Macbook Pro, from a risk management perspective it’s quite a different story.  All of a sudden it pays to hire a team of evil programmers for a million bucks to gain access to Mint’s millions of users.  Consider too the fact that most people re-use a single username or password as much as possible – this means cracking a lower security database (a web forum, etc.) can leapfrog access into those same user’s Mint accounts.  The less we’re using usernames and passwords for services, the better. What’s the solution?  I think a three pronged approach should be considered by any modern technical service that holds data of value:

  • Institutions should provide rich APIs in the first place and aggressively prevent screen scraping.
  • APIs should clearly segregate between “read only” and “read and write” access levels.  Mint.com can “read” my financial data but can’t “write” and pull money out of my account for example.  API access could further be segmented to only allow access to pieces of data (e.g. financial sums only and not transactions, or both, etc.)
  • APIs should use account credentials for access, but instead should be key or token based.

This might sound complicated, but in practice it’s very straightforward.  I simply login to authorize a request made by an application (anyone authorized a Netflix device recently?) and that’s it. In an increasingly networked world, application service providers bear increased responsibility to provide safe computing to users.  The old standards of storing usernames and passwords within applications need to change to reflect a different risk model.  This means both providers (financial institutions) and consumers (Mint.com) of data.  I want to use Mint and recommend it to others so I’m hoping that they can bring their clout to bear and work things out with financial institutions to solve this problem.

The Non-Technical Tech Talk

Two weeks ago (was it three?) I spoke at an ACM sponsored Tech Talk at Purdue University.  My mission was to give perspective on what it takes to run a large and quickly growing software team.  Many startups (including some I’ve been affiliated with in the past) will grow from very small teams to departments of over a hundred in a short time.  That kind of growth is explosive so as I thought about what to say during the presentation, I was struck that very rarely do I hear much about the human element of running a software organization.  I never heard about it in school. Focus on the people side of software construction has been one of my major recurring management themes because, as I told the group of students at Purdue, software development is one of the most human-intensive, human-dependent disciplines/arts/crafts/industries that exist.

To many, this might exemplify a supreme irony, but this has always been a core belief of mine: you can’t build great software without great people.  You can’t build great software without great teams.  Hardware and tools are easy to come by now, and the end result is that in today’s software industry, people are the only variable that means anything.  That’s why software companies should be psychotic about keeping turnover low.  Everywhere I’ve been I try to minimize bureaucracy.   I encourage telecommuting and spend money on great tools.  I like to setup team building, fun activities that appeal to technology workers like playing video games together once a week.  These are all downstream things that I focus on to maintain my upstream asset: people.

What does working on a great team with great people look like?  For students still in school, this is hard to visualize.  Group projects are almost universally hated.  Internships generally involve working as someone’s grunt on some meaningless or semi-solo system or task.  But I got all heads nodding when I asked if while they were doing their horrible group projects with their horrible group members if they remembered that one group who got up in front to present that was clearly happy to be working together, who had enthusiasm for their work product, and had spent an inordinate amount of time on their project.  Did they seem tired or annoyed?  No.  Was their project the best in the class?  Yes.  That is what a well-gelled software team feels like, looks like, and that’s the kind of product it produces. I talked a little more about great teams and how to recruit them and run them as we all munched on pizza.   Afterwards the organizer walked up and stated that I had given the most non-technical tech talk ever, but that he felt it was important and something that often gets missed.  

I definitely agree about the missing piece, and we got invited back for more pizza and another tech talk so we’re grateful for another opportunity.  I’d say that was mission accomplished.

Home Backup Strategies and Home Media Storage

Sara and I are starting to accumulate a lot of media.  We like to spend time traveling when we can, and I’m learning how to take decent pictures, and these combined mean we have quite a few photos and this seems to be accelerating.  We both listen to a lot of music.  We both enjoy watching movies and TV shows.  I particularly enjoy watching sporting events in HD and Blu-Ray movies (The Wife couldn’t care less).  We also each have a laptop, an iphone and we’ve got an ipod or two from several years kicking around.  I feel like this scenario is pretty typical for couples/families these days, and is only worse if you’ve got a couple of teenagers to multiply the gadgetry.  We also have a nice television a Blu-Ray player in the living room, but often prefer to watch movies or TV Shows in bed upstairs.For those of us who are the home technology guy, this kind of setup can really be a pain for making sure that media is available, that you can access it concurrently (e.g. if NC State is playing but Sara wants to watch a Blu-Ray title), and that it’s all backed up.  Recently I rethought our entire strategy and implemented the following setup, which I’m really happy with.  I’ll provide more updates as I flesh things out more.BackupsWe had been using a TimeCapsule (1TB) but we were having problems running out of space, and I’d had one die after about 10 months.  For our backups, I had the following criterion:

  • Simple and automated – I shouldn’t have to think about backups.
  • Local and remote – backing up to a time capsule or external hard drive is nice, but not when your house burns down or your car is stolen.
  • Cross platform – I run Windows 7, Mac OS X, and Linux (Ubuntu).
  • Available – I don’t want to have to boot up a machine or have one running just to back up.
  • Media specific stores – ideally, I wanted to be able to segment out certain media (music, TV Shows, etc.) to be separate from our machine backups.  This would let me transfer media between machines and also get around space limitations on individual machines.

The solution I settled on had some upfront costs, but as I often tell people – I’d rather go without food for a month then lose all of my data.

  • Synology DS410 Network Attached Storage (NAS) with four 1.5TB drives in RAID 5 giving us about 4TB of storage.
  • APC Smart-UPS 750
  • Repurposed Apple Time Capsule to function as a Wireless Access Point and Gigabit switch.
  • Backblaze cloud based backup.

The Synology device is an amazing product – it runs  Linux, has a very small form factor, and in addition to providing the RAID capabilities, it doesn’t use much power, is quiet, and includes a great web administration interface that adds things like rsync backup to a cloud, UPS support, firewall, different file sharing protocols, print serving, and DynDNS support.  The NAS also works great with Windows7 Backup and can support about 45Mbps across my home class gigabit networking gear.  Buy this unit now!Backblaze protects against our home going up in a blaze and another benefit of offloading backups to the NAS seems to be that our wireless network doesn’t slow down while backing up any more like it used to with the Time Capsule.Media Access / StorageOne of the best things about the Synology device  is that it functions as a DLNA and iTunes media server for music, video and photos.  This means that now we can save rips, ISO images, and MKV files, and all of our music and access it anywhere in the home from our Wireless network.  It Just Worked and within 20 minutes of setup, I was streaming music to my laptop and our LG blu-ray player browses the NAS via DLNA and can play anything (more codecs than XBMC out of the box, including even ISO images).  I bought a Blu-Ray drive for my desktop computer, and now with MakeMKV, I’m making copies of my Blu-Ray discs, and saving them straight to the NAS where they can be ripped and transcoded for easy access via our laptops, iPhones, TV, or any other DLNA capable device.  Finally we’re at the point we’ve been at with music for quite some time where our entire media library can simply be a box of disks sitting in the garage.  Maybe we’ll show them to our children as they try to comprehend what it was like in the old days.To date my only complaint is that it’s a little clunky making a playlist on the iTunes server for the NAS.  It’s possible, just not drag-and-drop from iTunes possible.  Also, I’m playing around with XBMC on an Apple TV that I happened across, but so far it’s been kind of a pain and the codec support hasn’t been great either – some variants of AVI files refuse to play, which is really annoying.  We’ll see how things progress from that angle.