Imagine Cup Team Spotlight: Codec

One more team one might wish to take a look at for this year’s Imagine Cup World Finals, Codec. Codec aims to decode student, teacher, and parent interaction in typical teaching scenarios. They have developed a system, EduVaTech, which consists of a website, a Windows Phone application, and SMS alerts.

Team members Raees Rahim, Jasmine Farley, and Donald Modeste see their system as a means of generally improving quality of life. Given education’s positive correlation with happiness and quality of life, they set out to remove barriers to education, starting with student motivation. By allowing students to communicate their feelings about a class, such as whether or not it is “boring”, they hope teachers can respond to student concerns quickly.

If you think Codec has a good idea, be sure to vote for them in the people’s choice awards.

Imagine Cup Team Spotlight: MiGi

Coming to compete in the Imagine Cup all the way from Vietnam, team MiGi wants to make the word more sustainable. Competing in the general software design category, MiGi wishes to connect those who wish to dispose of items to those in need of items. The team has created a website designed to allow for exchanges. Rather than throwing something out, you simply list your item you would like to get rid of, and someone else can offer to take it off your hands. Essentially, a form of “pre-cycling.”

The team has also produced a Windows Phone 7 application that they’ll be demoing at this year’s World Finals in New York. While there are several similar applications already in place in the US and Europe, such applications are uncommon in MiGi’s home, Vietnam. They hope to drive adoption of theirs and similar sites to reduce environmental damage, attacking the Environmental Sustainability Millennium Development Goal.

Imagine Cup Team Spotlight: Endeavour_Design

Endeavor_Design from Romania will be at the Imagine Cup World Finals, working on some seriously awesome embedded software. Team members Iuliana Valcea and Monica Claudia Dobrea have developed machine learning algorithms for autonomous robots. Their project, autoRobot, allows a robot to take the place of a human operator in cases where no suitable human is available. The result? A prototype robot which literally controls itself, and avoids collisions with obstacles in it’s environment.

This has several practical implications. For the sake of example, consider a robot used for search and rescue operations after a natural disaster, such as an earthquake or tornado. Such machines are typically controlled by a human operator, who looks at images radioed back from cameras mounted on the robot, and radios commands to the robot’s motors to control it’s direction. That system works great — until the robot goes under a piece of rubble and loses contact with the operator’s transmitter. If that happens, currently someone would have to go into the potentially dangerous situation (e.g. why the robot was deployed in the first place) to retrieve the machine, as well as carry out its original task. The technology inside autoRobot would allow such a search and rescue robot to continue autonomously, attempting to find it’s controlling radio signal once more. This is both safer and cheaper than attempting to retrieve the machine manually.

Another case would be for severely disabled people, who use nontraditional means of controlling electric wheelchairs. Such means often work based on subtle motions of the disabled person, such as an eyebrow twitch. Unfortunately, such systems aren’t able to react quickly — if the disabled person sees an obstacle they might not be able to correct the chair’s motion quickly enough. The technology that powers Endeavor_Design’s prototype would be able to step in and avoid collision with obstacles.

Finally, such a system could be used for drivers asleep at the wheel. Fatigue is a contributing factor in several accidents, and the technology for detecting a sleeping driver is already relatively commonplace. What is lacking, however, is a system which tells the car what to do after it has detected that the driver is asleep. autoRobot‘s internals could be used to prevent collisions with other vehicles, potentially saving the lives of those in the car.

autoRobot uses machine learning algorithms similar to those recently deployed in Microsoft’s Kinect sensor. Rather than attempt to solve the exact answer as is done in traditional algorithms, machine learning systems are “trained”, as a baby would be, using large amounts of sample data. Once enough data is collected, these algorithms “learn” to avoid entering situations where a collision would be likely.

The team has constructed a prototype robot using their machine learning technology, and produced a series of visualizations showcasing a room containing several robots using this technology. At both similar and dissimilar speeds, each robot independently learns to avoid collisions with the walls of the room, and with other robots it encounters. Note how early on (the P1 videos), the robots collide with walls, and with each other, but as the algorithm learns, the machines successfully avoid collisions on a regular basis (in the P2 videos).

Endeavor_Design’s autoRobot has huge potential for generally making the world a safer place. If you think Endeavor_Design has an awesome idea, please vote for them in the Imagine Cup People’s Choice Awards!

Imagine Cup Team Spotlight: IC Squared

The Imagine Cup worldwide finals in New York will start in just over a week. I’ve been given the opportunity to interview some of the teams beforehand though, and they’ve got some awesome demos and projects they’re prepared to present for the judges once the official competition begins. Till then, be sure to vote in the People’s Choice Awards for the teams you think are most worthy!

First up is team IC Squared, from Ithaca College, New York. Named after their school’s initials and Imagine Cup itself, IC Squared has developed an HTML 5 application entitled Embryonic in the Web Game Design category.

Screenshot of Embryonic - Used with permission of Team ICSquared

In Embryonic, the player plays the role of a doctor controlling tiny nanomachines. These nanomachines  weave their way through the feminine reproductive system over the course of a pregnancy. The game covers the entire gestation process, with challenges ranging from ecotopic pregnancy (where the egg gets stuck), to maintaining nutrition and toxicity levels as the fetus grows and matures. Several of the worst health problems that affect pregnancy are preventable, and Embryonic gets people thinking about lesser known but still important maternal problems. By teaching players about health of developing children, Embryonic attacks the Maternal Health Millennium Development Goal, earning the game it’s place as a world finalist game design. If you think Embryonic is a good idea, be sure to vote for Embryonic in the Imagine Cup’s people’s choice awards.

Team ICSquared officially consists of four people:

  • Corey Jeffers
  • Ashley Alicia
  • Marc Howard
  • Evan Marinaro

However, ICSquared is the product of a larger game design club at Ithaca College. That body was created as an outlet for former members of Ithaca’s game design major. A few years ago, the college decided to dissolve it’s game design program, leaving those students who had chosen that path out in the cold. In response, Corey, Ashley, and a few others created the game design club, while academically migrating into other major programs, such as computer science or film. Today, that club consists of roughly twelve active members, with several more members getting involved on an intermittent basis.

The four first created Embryonic as an entry for the We <3 Games competition at the Rochester Institute of Technology. They had never written an HTML 5 game before, and were told they had to construct something in 48 hours matching the Imagine Cup theme. They taught themselves HTML 5, and produced the first version of Embryonic. In 48 hours. For that 48 hours of design, this team took home first place for their first attempt at an HTML 5 video game.

Of course, the team has made improvements to the game since that first competition. They entered an improved design for the Imagine Cup competition itself, and have reached the level of world finalists. They’ll be giving demos to judges and squaring off against other designs at this year’s Imagine Cup World Finals in New York. Let’s wish them luck!

What is the Imagine Cup?

Microsoft was kind enough to send me to the Imagine Cup US Finals in Redmond this year, and they’ll be sending me to the world finals in New York in mid July. Not because I’m a competitor — technically they’re bringing me along as “press”… Anyway, there seems to be some confusion as to what the competition actually is, so before I talk about some of the teams over the next couple of weeks, I want to explain how things actually work.

The biggest confusion I see about the Imagine Cup is that people assume it is a programming contest. It is not. A typical programming contest takes a bunch of people, puts them in a room, gives them an interesting programming problem, and chooses the best implementation that solves that problem. It’s solely a test to see how well someone can write code. Imagine Cup is different. It’s not about code, it’s about ideas. That is, technical ideas which help solve the Millennium Development Goals of the United Nations (i.e. End Poverty and Hunger, Universal Education, Gender Equality, Child Health, Maternal Health, Combat HIV/AIDS, Environmental Sustainability, and Global Partnership). This competition doesn’t care how well you can write software. Rather, it cares about solving the world’s problems and the solutions that the competing students and teams generate.

The second thing to note about the Imagine Cup is that it is a “federation of competitions”. It’s not a one-shot deal. Each category is a completely separate competition with completely different rules. There are a ton of categories, such as general Software Design, Game Design for Windows Phone, Game Design for XBox/PC, etc. There are also a set of “challenges” — which are similar to the normal categorical competitions but which generally are less “big” in terms of the number or students involved. There’s also no rigid hierarchical structure, e.g. “first you start at the regional level, then you go to the national level, then you go to the world level, and so on….”. Each competition defines its own leveling system depending on the number of competitors, different participating countries, and other such things.

For example, the Software Design competition has a stipulation that the top team of the US Finals automatically gets entered into the running for the World competition. But the Game Design categories have no such stipulations.

Competitors first come up with an idea that fits their category, and works towards one of the Millennium Goals. They implement a prototype or demo which shows that idea as best they can to a panel of judges. The judges then rank the teams based on the presentations. There is not a prescribed set of criteria for the judges to look for — they choose the teams with the best ideas, and the best execution of those ideas.

US finals judges (lower left) frantically taking notes after the completion of a team's pitch

And… that’s about it. It seems complicated because of the massive number of categories, but the competition — and its goal are simple: get students solving the world’s toughest problems, and let them win fabulous prizes doing it.

My First Real Day at Microsoft

Yesterday was my first official day as a Microsoft employee, and today is the first day of actual work (yesterday was just “New Employee Orientation”). Already had kind of a full day. This morning was my first time trying to use the bus system to get to work, and things got… interesting. I left an hour early because I wanted to visit the company store and the library to get a few things before starting at work for the first time — basicly I wanted to find some books which would be h I’m supposed to take the bus from my neighborhood to the Overlake Transit Center, which is actually part of Microsoft’s main campus. Through my trips with the Student Insider program before, I had seen the transit center itself, and assumed that the bus would be going though the little area where there are overhangs where people wait for busses and shuttles.
However, the SoundTransit “Overlake Transit Center” bus stop is just a little bus stop on the side of the road, from which there is a little path to the actual transit center. When the bus started to cross the floating bridge over Lake Washington, I knew I was royally hosed. So I got off the bus and crossed to the other side, only to find that the bus I had taken over the bridge didn’t go back over the bridge in the other direction until later today, around 3PM. However, after digging a little I found another route that goes back over the bridge, at least to somewhere where I knew I could walk to work. Tried to get on that bus, only to be told that “SoundTransit” busses, which are only some of the routes, do not accept transfer tickets. Problem was, I didn’t have any cash on me to pay for another fare; I had left everything at home.

So I went up to a gas station and convenience store which was located in the area of the bus stop, and tried to get a cash advance on my (well, really, Dad’s) credit card. That didn’t work because it asked for a PIN I didn’t have (this card had never been setup to give cash advances), so I thought I was stuck. Luckily, there was someone in the store buying things, and I offered to pay for her groceries if she would give me three dollars in cash (the fare to get back across the bridge). The woman was very nice, however, and stopped me from paying at the last minute, and just gave me the three dollars. (Whoever you are, if this post ever finds you, THANK YOU!)

I went back down the stairs to where the place to wait for the bus was, only to find that traffic was backed up on the bridge for miles. Another bus eventually did come, and was completely packed. I was one of only three people who were able to get on — the thing literally had no space left. Bus started moving — and then instantly was stuck in the same traffic jam. Talked to the driver (I was shoved all the way into the front of the bus because it was so full) and he said that the reason for all the traffic was a broken down bus somewhere on the floating bridge itself.

When we did get to the point where we passed that bus, it turns out that IT WAS THE SAME BUS THAT TURNED ME AWAY FOR TRYING TO USE A TRANSFER TICKET! I could not have been more lucky for actually NOT being able to get on. It wasn’t a nice and easy.

From that point on it was relatively smooth sailing. Got to the overlake transit center, and walked to my new “home”, building 27. Work itself so far has actually been uneventful — just installing things and getting a build environment setup. They gave me my own office, a pair of 24″ TN panels, and a Dell Precision T5400 workstation to play with — the fastest dev box I’ve ever used. Awesome time so far meeting people on my team and getting started on… well, what I’ve been getting started on ;) .

Application Lifecycle Managment for C++ coming in Visual Studio vNext

The features of Visual Studio vNext anounced at Microsoft TechEd this year are pretty awesome in the Application Lifecycle Managment area — namely the ability to suspend what one is working on, and come back to it later without problems. However, being that most of the code I write for BleepingComputer is in “Native Code Land”, it’s always been kind of disappointing for me that many of the awesome features of Visual Studio do not work for C++ projects. That’s different in Visual Studio vNext — most of the managed-only features are coming to C++, and most of the new features work out of the box with C++. Microsoft has finally realized that still more of their developers are using C++ than managed languages like C#.

Static Analysis Tools

Visual Studio vNext will have several static analysis tools for C++ projects. The static analysis tools check for things which aren’t compile errors, but cause undefined behavior or will fail at runtime. There’s an entire new UI in that one uses in order to see what the static analyzer reports, and the tool explains line by line why it thinks something is bad, with full source code highlighting and human readable explanations.

Feature Parity of the VS 2010 Architecture Tools for C++ Projects

All of the existing architecture tools in Visual Studio 2010, such as layering diagrams, dependency diagrams, etc. will be available for native code. C++ features such as free functions which have no managed equivelents will be supported,

Native Unit Testing Framework

Visual Studio vNext will include a native unit testing framework, based on Microsoft’s internal unit testing tools. All of the features Visual Studio will have for testing, including code coverage and the new features such as the Unit Test Explorer, will be available for C++. Additionally, all of the Team System features for testing will be supported, such as gated checkins, team builds and tests with coverage, etc.

It’s awesome to see that Visual Studio will finally be supporting C++ as a first class citizen in more ways than the compiler. Visual Studio is one of the best IDEs in the world (if not THE best), and now that I can actually use it for my own code, it’ll be much more useful. Awesome!

Problem Step Recorder – Awesome tool for remote support

Had a particularly useful session today at Microsoft Tech Ed North America 2011. (Thanks for sending me Microsoft!) The session is called “Twenty Windows Tools You Never Knew Existed” — video of the session should be posted soon. I saw a few really neat tools, but one sticks out for me — the Problem Step Recorder.

To use the problem step recorder, simply ask your user you’re working with to open the start menu and type in “psr” and hit enter. The user is presented with this screen:

Problem Step Recorder Start Screen

Problem Step Recorder

The user pushes start record, and the tool will track everything the user does until they press stop record. It will then bundle this whole thing up into a ZIP file, which can be sent over an email or via a forum attachment. The IT support person can then figure out what’s going on with the end user without having physical access to the user’s computer.

PSR is in the box and available inside all versions of Windows 7. Enjoy!

Updates should be more common going forth. :)

Well, I’ve been looking at my use of this blog recently, and I think I’m really not doing it a justice — I’m going to try to get something out to you guys at least once a day here — even if the articles are more minimal — in order to get better at writing serially and in order to make this a more useful resource for others.

Because I’ll be pushing things out a bit more often, things might be a bit more haphazard than they have been in previous articles — they might be things more like reviews or one off articles, rather than the drawn out essays I’ve written before.

So — I’ll be writing something shortly… if you think the quality of the writing has suffered as a result, please let me know and I’ll go back to the more once-a-month style articles.

Oh, I’ve not gotten a chance to put things into Azure yet, so it’s going to be a bit before I’ll be able to write the next article in that series. :) TechEd posts will be coming first.

Initial Thoughts on Windows Azure, and a comparison to EC2

I’ve been playing with Windows Azure quite a bit lately, in an attempt to get this blog running over on that cloud service. Through the Microsoft Student Insider program, I have been given an MSDN subscription, and that comes with some significant Azure compute resources. While I’ve used DreamHost for years, and they’re an excellent web host that has been very good to me, they’re still shared hosting. Azure is a chance to play with some dedicated computing hardware which is much nicer than I’ve used in the past. Additionally, Azure is a service I’d like to be able to describe to several of my fellow students here at Case Western Reserve, in order to be able to discuss the differences between Azure and it’s main rival, Amazon’s EC2.

Azure and EC2 conceptually do the same thing. They are incarnations of the “power-on-tap” systems which were first foretold more than a decade ago. However, they are the first such systems to be successful, and the way they operate is significantly different than the first “power-on-tap” ideas first floated “back in the day.” Both services work on the basis of the Virtual Machine model. You run your service in VMs (or “instances”) on top of a hypervisor (Xen in EC2’s case, Hyper-V in Azure’s case), and the cloud provider runs the actual hardware on which that hypervisor runs. You delegate management of that physical hardware on over to EC2 or Azure, and worry about the software only. Despite both being built on top of the VM model, the services have significant differences.

Azure lacks EC2’s “Instant, Easy” nature

So, I logged in with my MSDN subscription, cruised on over to the Windows Azure portal, and promptly… got confused. EC2 is brain-dead simple. You create a virtual machine, you start that virtual machine, and are given Remote Desktop access to that machine. That’s it! EC2 does provide some services which allow you to dynamically create instances on the fly, and some facilities to perform load balancing and such, but if you don’t want those things, you don’t need to use them.

This is EC2’s biggest strength: it’s conceptually simple. Anyone who’s ever used any VM software is going to be able to grasp what it does immediately. There’s no learning curve; just instant gratification. Ask for a VM, get one in Amazon’s cloud, no questions asked.

Azure’s model does more for the developer

I knew that figuring out Azure on my own would be a major problem, so I went on over to DreamSpark’s Pluralsight On Demand service, which contains a several hour long class on Windows Azure. It covers everything from setting up Visual Studio with the developer tools, running Windows Azure projects on your own hardware, deploying your solutions to Azure itself, and other interesting tidbits.

After spending some more time figuring out Azure’s model, I found out that while Amazon’s system makes having applications understand that they’re running in the cloud optional, on Azure, it’s required. Rather than use a plain old VM that you could setup yourself, Azure provides an application hosting platform. That is, you give them what is essentially a ZIP containing setup instructions for whatever application you’d like to run, and Azure follows those instructions to get a VM running. Azure itself handles getting the right operating system installed, getting IIS or SQL Server configured and ready to go, as well as ongoing things like operating system security updates. Azure does more for you than EC2 does for the same price – management of the underlying OS and application server are included in addition to management of the hardware.

This is actually quite nice. You can deploy an application to Azure, and it will be load balanced, patched, and have maintenance performed on it without you having to lift a finger. (Amazon does provide a load balancing service, but it costs more money) Unlike EC2 where you’d have to go through the motions of cloning your existing AMI (Amazon Machine Image), running your updates and such, starting new instances one by one as you remove instances running the old AMI, et cetera, on Azure this is automatic. When you do need to update your web application (to fix bugs, add features, or the like), Azure lets you piggyback on top of their own failover process – simply deploy your new application to a staging environment, “upgrade” it to the production environment, and you’re set – no code required. The instances running your old code will be shut down, and the instances running the new code will be started, transparently to the user.

Azure requires the well constructed architecture that EC2 makes optional

All of this complication in getting Azure setup, however, really is the platform pushing the developer to a more effective use of cloud services. Sure, you can take any server and virtualize it in Amazon’s cloud service. However, to make best use of what either cloud service offers, the application needs to be aware that it’s running on the cloud – to scale up by starting more instances as required, or save money by shutting down instances when they’re not needed.

This means that new instances need to be able to construct themselves on the fly, without user intervention. Any programs or services required for a given web server need to be able to be installed in an automated fashion. Servers need to be tolerant of complete and absolute failure – the instance on which they are running being terminated – as the natural course of things. (Some users, notably Netflix, have a dedicated machine whose sole job is to randomly terminate their cloud instances to ensure things operate correctly when they fail) Moreover, the application running on these instances needs to be structured so that it can handle a varying number of webservers facing the Internet at any one time. This applies whether you’re running on EC2 or Azure. Azure simply makes these kinds of requirements a part of getting an instance running, while EC2 simply will create instances with no initial instructions if desired. EC2 might be simple to start with, but as your application grows you’re going to end up much happier if you lay this kind of scalable groundwork ahead of time.

If it runs on Windows, it will run in Azure

Out of the box, Azure is optimized for running ASP.NET (and ASP.NET MVC) applications. Also, there are some out of the box provisions for PHP or other FastCGI based applications. This has led to a misconception (at least in my area) that Azure is limited to Microsoft approved languages and frameworks, or that it’s limited to specific application types. This is not true – most any language can access the automated provisioning bits for Azure using it’s Managed, Native, or REST based APIs. Steve Marx, who works on Azure, gave an excellent talk on this entitled Node.js, Ruby, and Python in Windows Azure: A Look at What’s Possible at MIX11, which is available for viewing online. He details the bits one would need to do to use alternative web scripting languages, storing the contents of the scripts over in Azure’s blob storage, and running those scripts on demand on top of Azure’s services. He demonstrates how one can get Azure to do most anything – even without going through the trouble of acquiring a Windows Server 2008 license and uploading it to Azure yourself.

Jury’s Still Out

I’m still not entirely certain which service I like better. Azure is certainly more difficult to start out with, but looks like it might make more sense in the long run. However, I‘m not really qualified to talk much comparing the services until I’ve actually constructed a Windows Azure application. I’ll be back after it’s running for a few weeks with more information. Smile