Monday, December 23, 2013

New App: Dash Recorder

Looking for another dash cam app?  :-)  Dash Recorder watches the road and starts recording with sudden acceleration or by tapping the screen.  You can also use the camera hardware button to snap a picture of the road without leaving the app.  It tracks date/time, location, speed, and bearing.  You can add a title and description to each recording to remember what happened.  Sharing to SkyDrive is supported to get the recordings off the phone.  Let me know what you think!

Link: Dash Recorder

Monday, December 2, 2013

Fun site for learning JavaScript

Looking for a fun way to learn coding?  I think JavaScript is a great way to get started since it gives a good foundation of variables, functions, conditionals, loops, arrays, and more.  CodeCombat uses a lite RPG game as a way to focus the lessons.  It looks like a great way to get started!


Sunday, December 1, 2013

New to coding?

MIT has a great free tool for teaching kids to code using a drag-and-drop paradigm.  I recently wrote a brief intro to Scratch for the Oregon Game Project Challenge design blog.  There are profiles for other beginner/intermediate tools as well.  Take a look if this sounds interesting!

Link: OGPC design post

Monday, November 25, 2013

v1.1.1 SkyDrive Browse Task fix!

Oops!  My SkyDrive Browse task package was missing two files!  That's the problem with not testing it thoroughly enough!  I've updated to v1.1.1 to remove some unnecessary files and add two required ones.  Sorry about that!


v1.1 SkyDrive Browse Task update

I've just updated my SkyDrive Browse Task for Windows Phone.  It now supports folder selection as well as file selection so hopefully it will suit even more application needs!


Tuesday, November 12, 2013

SkyDrive Browse Task for Windows Phone 8

I love the task-based way of handling platform features on Windows Phone.  It works great for choosing or taking photos, sending email/SMS, or taking a user to Marketplace.  One inexplicable omission is that you have no way to let a user select files from SkyDrive, even though Windows Phone is supposed to be connected to the cloud!  To remedy this, I've created a fairly simple task-based SkyDrive browser for selecting files.  I made it look like the SkyDrive browser used by Office Mobile 15.  This displays the files and folders at root, along with sharing information.  You can tap a folder to enter it, the "up" button to go back a folder, or a file to select it.  Selecting a file passes it back to the caller (your app) so you can open it or do whatever you need.  The library currently supports English, Spanish, German, and French.

Preview image of SkyDrive file browser for Windows Phone 8

To use the library:

  1. Use NuGet Package Manager in Visual Studio to reference ArianKulp.SkyDrive.BrowseTask (direct link below).
  2. In your app, integrate Windows Live LiveClient authentication.
  3. Create the SkyDriveBrowseTask object and pass it the LiveClient.  This is required as it assumes that you are already handling authentication login/logoff in your own way.
  4. Handle the Completed event to deal with the selected file path (or canceled operation).
Handle the request:

var t = new SkyDriveBrowserTask();
t.LiveClient = App.LiveClient;
t.Extensions = "xlf;xliff";
t.Completed += SkyDrive_Completed;

Handle the result:
async void SkyDrive_Completed(object senderSkyDriveResult e)
    if (e.Error != null)
        // TODO: Handle the error
    else if (e.TaskResult != Microsoft.Phone.Tasks.TaskResult.Cancel)
        var file = e.ChosenItem;
        // TODO: Do something with the returned file
    } }

Link: SkyDrive Browse Task

New App: Update Central

Looking to keep up with Windows Phone updates?  Always scouring the blogs to learn the latest rumors and leaks?  Update Central is your one-stop app for finding out about what's coming soon and what's already on your phone.  You can read through past version changes and find out what to expect.  It's a free app and should go live in about 24 hours!

Link: Update Central link

Another month, another chance to win!

The Microsoft Apportunity sweepstakes is still going!  Every month three devs can win money (up to $1000!) just for submitting an app to the Windows Phone Marketplace.  If you're doing it anyway, see if you can win.  Just one more reason to get cracking on your apps!


Tuesday, November 5, 2013

Google Helpouts is Live!

Looking for help bringing your Windows Phone app to market?  I'm using the new Google Helpouts platform to provide one-on-one help for Windows Phone code, navigation, localization, XAML, databinding, and more!  Check it out and maybe I can help you!


Monday, November 4, 2013

Microsoft Tech Affiliate Program

Have you heard of the Tech Affiliate Program before?  It's a great way to get involved with your communities to share knowledge of Microsoft technologies.  If you are already a speaker, or run a group, you might have been involved with Microsoft in the past with quarterly packages of swag, cards, and information.  Tech Affiliate gives you more flexibility by letting you earn points for your events to redeem for items that you need.  It's also a great place to get banners and contact cards, and to serve as your presence for affiliate contests.

I've been in the program for over a year now and it's really helped me to engage with more developers, and to be able to be a community resource for contests and Microsoft offers.  The Tech Affiliate Program is also great because it offers "scholarship" funds to help defray certain costs of hosting events.  If you are involved in the community, you need to check it out!

Friday, November 1, 2013

Wanna try Google Helpouts?

Google Helpouts is a cool new platform that allows people to offer services over video/chat for a fee.  This could be things like exercise coaching, language lessons. or even health consultations.  I've decided to offer code coaching for Windows Phone.  If you are struggling with a project and would like some assistance, you can use my Helpout to share code over screen sharing while talking and using the webcam.  Until the official rollout, all charges will be refunded, but it gives a way to test out the system, and test out the providers.

I have one invite code for the person with the best comment!  Just give me a quick reason why you would like the code.  With the invite code, you can use my hangout, but you'll also see all of the other ones.

Sound off in comments!

Monday, October 28, 2013

New App: Grade Viewer

Grade Viewer

I've just published yet another Windows Phone app (that's 16 now)!  This is a grade viewer for your elementary/middle/high school students.  It connects to your grading system if it uses Pinnacle by Global Scholar.  I really don't know how prevalent this system is, but my district uses it so I had the ability to write an interface to it.  I'd love to hear from parents or students who find it useful.

Link: Grade Viewer

Friday, October 18, 2013

Major software projects can be pretty fragile

I love reading about big software projects.  There are so many places for things to go wrong, and they provide a valuable opportunity for an insightful post-mortem. is a recent project that came under enormous scrutiny due to the inability to deal with its users when it rolled out.  I found a great post with some good analysis of some of the problem areas.  Hopefully the government will be transparent and release information on their process and how it can be improved in the future.


Thursday, September 5, 2013

Windows Phone SkyDrive Teaser

Have you ever wished you could call the SkyDrive file browser as a picker task from your apps?  Your wait is almost over!  More info coming soon...

App update: XLIFF Localization Helper

I've got a new version of my localization helper in the Marketplace.  I've added an update to allow filtering the translation units based on status.  I've also put in ads since a guy's gotta eat!  Check it out!

My next version should be out soon and will add SkyDrive access and a recent file list.  I'll also be adding a paid version with more features in the near future.

Link: XLIFF Localization Helper

Fixing missing IntelliSense in Visual Studio

I keep having trouble with IntelliSense breaking in Visual Studio 2012!  I'll be working just fine, then suddenly I get no dot completion on anything.  It's pretty annoying, so I scoured the web to find a solution.  I finally did!  Here's the solution, taken from
1. Open the start menu and type “%AppData%” and press enter to get to your Application Data Folder.
2. Either you were automatically placed in the “Roaming” folder or you weren’t. If you weren’t, go to the “Roaming” folder.
3. Open the “Microsoft” folder.
4. Open the “VisualStudio” folder.
5. Here you’ll see a folder titled “11.0″ (the VS 2012 folder) and probably also “10.0″ (the VS 2010 folder).
6. DELETE (or rename) the “10.0″ folder. Note that you can now kiss your Visual Studio 2010 settings and preferences goodbye (your projects will be safe and sound).
7. DELETE (or rename) all other folders that are not the “11.0″ folder, assuming you used to have Visual Studio 2008 or whatever.
Now restart Visual Studio 2012 and you should be good to go!

Tuesday, August 27, 2013

New app: XLIFF Localization Helper

My newest app has just been published.  My XLIFF Localization Helper lets you review translation resources directly on your Windows Phone 8 phone.  If someone emails you a translation, you can open it up in the app and review the phrases and translations.  It's currently free.  The next version will allow you to make changes to the file and send it back with updates.  The modify feature will probably have a low price to it.  It registers itself for the XLF extension so you don't need multiple steps to open your file.  Let me know how it works for you!

Note: The XLIFF standard is pretty extensive.  Current functionality is limited to features used by Microsoft's Multilingual App Toolkit.

Link: XLIFF Localization Helper

Saturday, August 10, 2013

Translation help

Looking for help coming up with the right words when you are translating into other languages?  I speak Spanish moderately well, but I am lacking so many technical terms!  My go-to source for translations of computer terms has become and other Microsoft web sites.  Most of the content is available in a variety of languages, and you can switch between them easily.  For example, if I search on a given topic, I will get a URL like the following:

This is a page that includes information about using touch gestures (tap, swipe, etc.) on touchscreens.  Being sure of the right way to translate this could be difficult.  Instead, I trust that Microsoft has done their homework!  In order to change language, just look for your default language in the URL (/en-us/ in my case).  Now, just change that to the language you want to check:

Bam!  Now you are seeing the page with all of those pesky specialized words translated for you!  You can use this for software-related terms or phrases.  Obviously, it's not very helpful if you don't know anything about the target language, but if you are just looking for a set of terms, this might be the way to do it!

Wednesday, July 24, 2013

Fixing SelectedItem must always be set to a valid value

In the Windows Phone app I'm currently working on, I kept getting an "SelectedItem must always be set to a valid value" exception from a ListPicker on the OnSelectedItemChanged event.  It wasn't happening every time, but often enough that it was driving me crazy!

My collection consisted of fairly simple objects for the user to choose from, and I had a view model property for binding to the selected item.  The underlying issue is that it wasn't recognizing the selected item (in the binding) as a member of its list in ItemsSource property.  It turns out that it was a really simple fix.  By simply overriding the Equals method, my problems went away.  This enabled the control to see the selected item as equal to an item in the list.

If you've never done this before, you just need to add a method in the class to compare some key property, like this:

public override bool Equals(object obj)
    var other = obj as ThisClass;
    if( other == null ) return false;
    else return (this.SomeProperty == other.Property);

That's it!  Customize as needed, and you'll be good to go!

Wednesday, July 17, 2013

Glyphs for your apps

Instead of looking for images for all of your buttons, a much more lightweight way to add images in your apps is using font glyphs.  You've surely seen Wingdings and Webdings, but did you know there's also a Segoe UI Symbol font on your system?  You can use glyphs from this font in your Windows and Windows Phone apps.  All of the images follow the modern (Metro) look-and-feel so they'll look great.  The only problem is that you can't yet use glyphs in the application bar in WP.  Hopefully that will make it in a future update!  The link below will show you all of the available images so you don't have to preview them in Word.  To use them, just take the hex value and encode it using standard XML encoding:

<Button Content="&#xE206;" />

Miscellaneous icons
Small sample of glyphs from Segoe UI Symbol


Fixing "Multilingual App Toolkit build completed with errors"

I was having lots of problems with a project after adding Multilingual App Toolkit support.  It just stopped building and gave lots of build errors.  After talking to the MAT team folks at Build, I learned that reason for the issue was having resx files in the root of the project.  For some reason, it required them to be in a subfolder.  The fix is easy: either move your resources (like they really should be!), or...
...update to the newest version of the toolkit!  It turns out that the bug has been fixed.  All works great now.  If you were holding off on updating for any reason, do it!  It's a great product and it gets even better!

Wednesday, May 8, 2013

OGPC Results

Well, the Oregon Game Project Challenge (OGPC) was held last Saturday.  We had four teams from the high school, and two from middle school.  From middle school, Franklin Team Green took home the Pro's Choice award, and CV Raiders 1 took home the Technical Award.  Each award included a trophy and Best Buy gift cards for the team members.  We learned some good lessons for how to be even better next year.  It was a great day, and really demonstrated how important such events are to kids.  I hope they can continue for a long time!

Watching presentations on stage

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.


Friday, March 15, 2013

Converting from Expression Design to SVG

That wasn't much fun!  It turns out that converting from XAML to SVG is harder than I thought.  I had a logo that I had created in Expression Design.  I don't believe that Microsoft is even supporting it anymore, but I still have it.  The .design file is worthless as even Expression Blend won't touch it.  I figured, it couldn't be that hard to export!  I was definitely wrong.  There are only a handful of format options, but each have their drawbacks.  Since Inkscape can import from XAML, that seemed like an easy approach.  Unfortunately, that import just made a mess of the image.  Exporting to bitmaps and tracing them would be an option, but not a great one.
The solution ended up being to export to PDF.  Yes, the venerable PDF format.  Since it supports vectors, you get a high-fidelity export (though it appeared to clip part of it).  From Inkscape, I performed an import on the PDF file and got a perfect SVG image!  I hope that helps someone!  If you don't have Design anymore, than I'm not sure what to tell you...

Tuesday, March 5, 2013

Rebate Tracker Release v1.2

Another release has gone out.  I had a few updates in the pipeline, so that makes for a few announcements!  I've got a very similar codebase between Rebate Tracker and Expense Tracker, so they should usually get updated at the same time.  Live Tile update for rebate info, changes for international date format, and currency display.  Getting the period vs. comma to work for decimal depending on locale was more difficult than I thought!  As usual, let me know if there are any problems.

Link: Rebate Tracker

Cyberlink PowerDVD 12 Review

I've been a PowerDVD user for years, and have always been happy with their playback capabilities. After moving into BluRay a few years back, they've continued to be an integral part of my Windows Media Center configuration. I don't want an actual BluRay player since everything I play (TV, files, discs) go from my WMC box and a projector. Unfortunately, as of PowerDVD 12, all of a sudden they were much more careful about HDCP and I could no longer play discs using my projector via VGA cable. I actually continued using PowerDVD 11 for some time just so I wouldn't lose playback!

With my last projector upgrade, I can now do HDMI, so I'm safe regardless. The image quality from PowerDVD 12 is as sharp as ever, and they continue to add format support as time goes by. My projector is DLP 3D-ready, as is PowerDVD, though I don't have the glasses to try it out yet. Everything I throw at it plays back fine. I love the TruTheater effects to provide better sharpness, color, and audio leveling as needed. Though BluRay discs don't really need it, DVD's often do.

What I don't like about PowerDVD in the past few versions is how big it is. The price starts at $80 for Pro and goes over $100 for Ultra (MSRP). The low-end $50 Standard version won't play BluRay. Considering I could get a low-end hardware BluRay player for well under that low-end price, it's pretty hard to justify a software solution that costs more. A reasonable price to play discs would be $20 I think. I know there are licensing costs involved (at least $10 with all the formats they support), but I think there's an awful lot of markup there.

Another problem is the bloat of the install. It's not just a media player, but also an entire library solution with DLNA, transcoding/streaming, social features, and movie advertising. I'm sure part of the extra features is to justify the cost, but I wonder how many people really use them.

Another complaint, is that as soon as you pop in a disc, PowerDVD pops open and is completely unresponsive for ten seconds or so. If you weren't ready to play yet, you just have to wait to dismiss the window. I can't find a way to disable this feature anywhere. It also installs a number of background tasks and services that automatically run whether or not you ever pop in a disc.

The bottom line is, if you just need to play BluRay discs, you will be overpaying. You'll get a player that gives you great quality, but it's a much better deal to just buy a hardware player.  If you need a software player, PowerDVD does a great job of playing movies and shows.  Just don't buy more features than you'll use.
PowerDVD 12 Ultra box photo

Expense Tracker Release v1.2

The newest update to Expense Tracker has been published.  I didn't even realize that there were problems for international users!  It turns out that my currency entry field wasn't allowing commas for decimals, and the date format wasn't right.  These should be working fine now.  I've also added basic Live Tile update support.  Please let me know if there are any additional problems!

Link: Expense Tracker

Expense Tracker QR Code

Celebrity Geek!

I forgot to post this image from a number of months ago (Build, I think).  I met Anders Hejlsberg a while ago, and have spoken with him a number of times at MVP events.  He's a really cool guy, and a huge part of Turbo Pascal, Delphi, and now C#.  It's always fun to hear him to talk, and his insights are amazing.  I wish I was half the programmer/architect he is!  If he ever get a chance to say hi to him, take advantage of it!

Friday, March 1, 2013

Fixing string formatting locale for Windows Phone

This has caused me so much frustration!  My Rebate Tracker and Expense Tracker apps only support decimal points in currency (disallowing commas), and only format the date in MM/DD/YYYY style.  I tried switching the regional settings on the emulator and there was simply no change, yet I was using the standard StringFormat in the databinding, or string.Format behind the scenes.

Apparently this is a known bug, but I didn't come across a solution until I finally stumbled across an old post by Tim Heuer (always worth reading).  It turns out, that the very simple solution is to set the Language property of the page.  I had never noticed this property before, and I wouldn't have expected it to be required!

All that you need to do is set the property in the constructor of the page.  To make it even easier, you can create a base page object (if you don't have one already) and set the property there.

this.Language = XmlLanguage.GetLanguage( Thread.CurrentThread.CurrentCulture.Name);

This simple line makes such a difference in creating international apps!  Definitely something to add to my list of tricks.


Friday, February 1, 2013

Windows Phone App Contests

Do you have apps that are almost ready to publish?  Maybe a quick app idea that you just need a few hours to implement?  There are two contests from Microsoft that you can take advantage of.  Get your apps out now!

The Ultimate Experience
Generation App will reimburse your $99 Marketplace fee and give you a free copy of Halo 4 for Xbox.  You'll also be in a drawing win an Xbox 360 for each app you submit.  This counts for any apps published between December 20, 2012, and February 28, 2013.  Do it!

Also, starting on Friday (February 1), you can enter another contest (Community Apportunity) that puts you into a drawing for $1000, $500, or $250.  That's pretty good money for apps you probably would have developed anyway!

The best part is, apps can be submitted to both contests (assuming you wait until Feb 1) so you can really rake it in!

Good luck!

Tuesday, January 29, 2013

Kickstarter success: Digispark received!

What an exciting day!  I got my Digispark Arduino board the other day.  I kicked in on Kickstarter for the reward level with two boards plus a few accessories.  Everything is just as described in the pitch and I couldn't be happier.  This is a tiny board at an equally tiny price.

It was $21 for two devices, and should be $8/chip in quantity in production.  I can use the Arduino IDE, and power it directly from USB (or AC/DC USB charger adapter).  It has six inputs/outputs, onboard LED, and supports emulation for mouse/keyboard/joystick with almost no effort.  It's really an amazing little device and if you like hardware hacking, you need to get yourself one now.

So far I've done some simple keyboard prank stuff, the blinking light ("hello world" of Arduino I think), and done a pulsing buzzer.  I have a cheap Bluetooth module and I plan on creating a simple interface from our treadmill to computer/phone.  It's cheap enough to do that kind of thing!

Did you get one?  What do you think?

Problems with serialization and ApplicationSettings

DataContract makes it so easy to serialize your data classes!  Unfortunately, if there are any errors, you may not see them -- especially if you are saving/loading the data using ApplicationSettings.  First, change exception settings to see all thrown (not just uncaught).

Now you will see that any fields with "private set" are not serializable.  Such a simple fix, but without showing "thrown" exceptions, you just have to guess!

So now you know!  If you plan to serialize a field, don't make it private set.  If you required a privately settable field, then you can perform advanced work to enable the scenario, but that's on you!

Friday, January 11, 2013

Windows Phone Location Simulator

Wow.  I feel stupid!  I've never had consistent luck with the location simulator for my WP apps, and I always just assumed it was buggy.  Sometimes I would get PositionChanged events, and other times I wouldn't.  It turns out, that there's a perfectly reasonable explanation!  If you have your accuracy set to Default, it will ignore the simulator.  Of course, at run-time, you want Default for best battery savings (if you don't need high accuracy.  The simple answer is to change it based on debugging!  I'm glad I chanced to look it up instead of just being frustrated this time.