Sunday, April 21, 2013

Oregon Game Project Challenge

The Oregon Game Project Challenge, known as OGPC, has its competition in two Saturdays (May 4th).  This is the coolest competition, and the first one like it I've seen.  It's part of TechStart, and is all across Oregon.  Kids form teams to create video games based on a challenge each year.  This year's challenge is "public good."  Games just need to somehow incorporate the concept of public good.  Other than that, it's all fair game.  You can do side-scroller, isometric, first-person, or other mechanics, you can be single- or multi-player, any platform, and framework.  Kids use Kodu, Scratch, Game Maker, XNA, and other technologies.

There are middle school and high school teams, and many schools have more than one group. Each team creates a game, and can also do extra work to earn achievements to increase their score.  At the day of competition, games are scored based on the game itself, how it adheres to the theme, and how many achievements it earns.  I love that there are industry professionals on hand, giving the kids great feedback.

If you are in Oregon and not taking advantage of OGPC, you're missing out!  If you are out of state, see what you can do to bring something similar to your state.  If I had known about it back when I lived in Iowa, I would have started something like it.  I sure wish I could have competed in something like it as a kid!

Link: Oregon Game Project Challenge

Saturday, April 20, 2013

Technology and kids

In addition to my professional development and consulting, I spend a lot of time working with local schools to bring better programming options to kids.  I'm a huge STEM advocate, and I believe in doing what I can to make things happen rather than just complaining about it.  Considering how difficult it can be to get funding for music, languages, and the arts, it just seems like the community needs to be as supportive as possible to bring better opportunities to schools.  Since I was interested in programming as early as the fifth grade, I want to see that kids can learn about technology when they are interested.

Perhaps, not surprisingly, my involvement has paralleled the development of my own children.  Back in Iowa,  I led a technology club centered on LEGO Mindstorms NXT for students in K-6.  After moving to Oregon, I got involved in a local middle school to start a programming/technology club for 6-8th graders.  Since my older son is in high school, I started a programming/technology club there as well.  I love supporting kids as they explore the advanced concepts that many kids (and adults) take for granted.  By getting involved with them in school, they are more likely to discover a field they didn't even know they had an interest in.  This is one way to prepare young adults for a technology-oriented work force.

From time to time I've blogged on new software and hardware that I'm only aware of because of this work.  I've decided to start blogging more often to explore the software, hardware, contests, and related topics available to K-12 students, educators, and involved parents.  Follow these posts with the "k12" tag!

Friday, April 19, 2013

New app: Door2Door

My newest app has been published.  It's a tool for selling or fundraising door-to-door, creatively named Door2Door!  It uses location services to track where you go, and lets you set what happened at each house, and how much money you received.  It also has a "nearby" feature to show you which houses hear you might need to be revisited.  I'm pretty proud of the app since it uses location, it can upload its data to Skydrive as an Excel spreadsheet, and it is available in both English and Spanish.  It was a good challenge!

Link: Door2Door

Tuesday, April 16, 2013

Marketplace Dashboard for WP8

A new update is on its way for Marketplace Dashboard to resolve the timeouts.  I've done a bunch of work to improve the asynchronous handling so it should happen faster anyway.  The problem is how many calls need to be made since there's no direct API.  I need to make two calls regardless of number of apps, and then another four calls for each app.  It adds up really quickly!  I've implemented a two-tier update process now, so it only does the full update when you ask it to.  It saves time when you don't have any new apps/versions to add and just need updated stats.  Anyway, hopefully it will be live any day now!

Localization and Translation

If you aren't writing multi-language apps, you should be!  If you set it up from the start, it's not too difficult, and the rewards are great.  Unfortunately, it's a huge pain if you wait until far into development to get started.  For Windows Phone, here are things to keep in mind for translation:

  • All strings in text (message box text, message box options, string comparisons)
  • Captions on app bar menus/buttons (since they aren't bindable, it's extra work)
  • Strings in XAML (button captions, text block labels, etc.)
  • Images (some images will require changes to be relevant in different lanugages or cultures.  careful of things like a dollar sign for money)
  • Sort order, currency/numeric/date formatting (if done right, this is almost zero work)
Even once you have all strings pulled out to resource files and all the right logic in place, managing the strings can be challenging.  Fortunately, Microsoft released a great Visual Studio plugin, the Multilingual App Toolkit, to make it easy to create translated resource files using Bing, manual work, or submitting to various online human sources.  It's a great help that makes it really manageable.
Also, be sure to set the Language property of each page using the culture name property of the CurrentCulture.  
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
With that in place, you will get all string formatting to be locale-based for free!  I don't know why it doesn't happen automatically, but it's an easy enough fix.  I use my own base page class to make that easier.

Finally, remember that testing doesn't require that you change the language of your phone.  You can manually change the Thread.Current.CurrentCulture and CurrentUICulture properties to force any language regardless of system settings.