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.