Yes, the SUX posts do have resolutions sometimes.  Thanks to Charles Sterling over at Microsoft for coming to the rescue.  I can now see my bugs when I'm logged in.

 

Thank you! :)

devLink Recap

August 21, 2010

The week after PyOhio, I had to speak at devLink in Nashville, TN.  This was my 3rd devLink, and I have enjoyed attending it each year.  It's a great time for me to see my friends, learn about technologies I want to know more on, network with others in the field, and overall come back home to put my new knowledge and new contacts to use.  This was my 2nd year as a speaker, and this year went much better than last - demos weren't failing, and despite the back-to-back-to-back talks on the last day, things went really smoothly.  It was great to talk on social networking, web analytics, IronPython, and PowerShell.

I actually attended the Women in Technology gathering on the first day.  Many of you know that I am not a fan of WiT gatherings typically - I've seen too many that are "This is how I've been burned, and yet I continue to fight the fight" kind of gatherings, and I can't be bothered with those.  This one was not that.  This one was a great discussion on how we can get women involved and how women are still a rarity.  There are a few of us who are in hiring positions, and it's sad to see that there aren't many females applying for technical jobs in general.  I liked that it was a great chance to network with other ladies in the field.

While I was down there, I also caught a few sessions on Silverlight and Windows Phone 7.  Now if you haven't seen Windows Phone 7 by now, I recommend you check out the Windows Phone 7 developer site and play with it to see what's coming.  I sat through James Ashley's presentation on "Advanced Windows Phone 7 Series Development" and learned about how WP7 dev is like Silverlight 3 + all of its goodies.  I also learned about the concept of tombstoning.  After James' talk, I caught Pete Brown's talk on "Beyond Hello World: Windows Phone 7 Silverlight Development Deep-Dive" which covered more Windows Phone 7 tips and tricks that weren't covered in James' talk.  I really enjoyed the fact that they talked about what was in their talks and that there was very little overlap.  That was great!

On the purely Silverlight side, I caught the beginning of Shawn Wildermuth's "Architecting Silverlight Applications".  Working on Silverlight professionally, I found this talk helpful in that it provided me things to keep in mind while architecting Silverlight solutions.  

When I wasn't sitting in sessions or giving sessions, I was talking with my friends on some ideas that you'll see from me in the future.  One of the things that I can talk about is that David Giard recorded me for an upcoming episode of Technology and Friends.  Dave chats with friends on technology-related topics - including (but not limited to) the cloud, MEF, Javascript, testing, PowerShell, community events, PMing, SSIS, and F#.  If you haven't seen it yet, I highly recommend checking it out.  Their conversations are quite interesting to see!

Overall, I really enjoyed devLink.  There were plenty of opportunities to link with other devs.  My only concern though is that there were so many awesome talks that I wanted to see during lunch and would've missed lunch if I went to all of the ones I wanted to catch.  Skipping lunch isn't a good idea for me, so I had to miss some of the talks I wanted to see.  I really like the idea of a keynote or large talk during lunch rather than sessions.  Overall, though, this was still a great conference!

Thanks to John Kellar, Leanna Baker, and all of their volunteers who helped make devLink such a great success!  Looking forward to devLink next year!

 

PyOhio 2010 Recap

August 21, 2010

At the end of July, I had the opportunity to speak at PyOhio in Columbus, OH.  This was my second year picked to speak, and this year, I did everything I could to stay healthy, as I really wanted to be there this year.  (I missed my talks last year due to serious health issues.)

Both of my talks had low turnouts, which I expected.  IronPython doesn't have a large following here, although it does have some people curious.  Also, to be fair, my second talk was scheduled against an entrepreneur panel with Eric Floehr, which would've been great to catch!

Overall, though, I really enjoyed the event.  It was great to see the regional Python community get together to talk Python and share their experiences.  I finally got to meet William McVey in person; he and I follow each other on Twitter and he had expressed interest in leading the Cincinnati Tech Events initiative.  And those AGI guys who kept appearing - you guys rock!

From what I've heard, the sprints went well.  Unfortunately, I had another conference the following week, so I had to miss out the sprints this year.

If you're into Python and would travel to Ohio to talk with others on Python and write Python with others, PyOhio is definitely worth checking out!

I swore I wasn't going to write this post.  I figured I could just work this out via an email to support.  Oh but no... that's not the case.  I need to share my feelings on Connect, as I know I'm not the only one who is finding this to be more of a burden than a great support tool.

Recently, I had blogged about the StringFormat issue in Silverlight.  I had been nagged to submit the bug against Silverlight, and so I logged into Connect to do it.  Imagine my frustration when I realized that their submit form doesn't have a confirmation page.  I figured my session had timed out, so I retyped up the bug and resubmitted it.  Again, no confirmation page.  No confirmation email. Nothing.  ... Until 12 hours later, when I get not one, but two confirmation emails.  Grr... Connect form confirmation SUX.  

But wait... there's more.

So in those confirmation emails, I got link s to the bugs.  I could see the bugs when I wasn't logged in.  However, when I was logged in on my Live ID, the same ID I used to submit the bugs in the first place, I got "Page Not Found".  Now wait a minute... I can see my bug when I'm not logged in, but when I'm logged in, I can't see it?!  Strike two...

 And the icing on the cake...

Quoting directly from an email that I got from Microsoft Connect Help, with a guy who has "Microsoft Connect Team" in his signature...

You can see the bugs even when you are not logged in with your windows live id is because it is designed in such a way that even the nonregistered users can see the bug.

I already figured that I could see it while not logged in.  But how about addressing the original issue of not being able to see it while logged in?

I know I have other friends who are frustrated with the system as well.  I wouldn't have blogged about it, but this close to three strikes and I have to talk about how much it SUX.

Microsoft Connect has A LOT of room to grow.  But if this is the way I need to report bugs in products, I'm sorry, products, but I have a tool that's more headache and hassle than what it's worth.  Look for your products in a future SUX post or an email if I have a contact to work with.

In follow up to the problem I've been running into with StringFormat in Silverlight.... yes, there really is a bug with it.  Tim Heuer blogged about it a little more.  Check out his post StringFormat and CurrentCulture in Silverlight for a workaround.

 

As I write more Silverlight code, I get more frustrated with its quirks.

I love that StringFormat is included in Binding.  However, what I don't understand and what I don't like is that StringFormat doesn't seem to respect the CurrentCulture

Let's say I have an app that's tracking GiveCamp participation.  Let's say that my foreign friends over in Europe organized a GiveCamp, to add an international factor.  Now let's say that we're tracking the number of devs working on projects each hour.  And let's make a Silverlight app for that!

The daily chart may show the number of devs, broken by hour.  On the X axis, I'll see time in my familiar "8:00 PM" format.  My foreign friends should see that same time as "20:00".  I set the StringFormat property on my DateTimeAxisLabel (from the Silverlight Toolkit) and it works wonderfully.  

But let's say I want to add a tooltip to each point to show the time (IndependentValue) and number of devs (DependentValue).  I toss a couple of TextBlocks in my ToolTip template, using StringFormat to format them.  These are the same format strings that I use on my axes, so they should respond similarly, right?  That's what I would've expected.

But as I run my internationalized app, I see "8:00 PM" in my tooltips, and so do my foreign friends!  Wait... what?!?

Time to add code to get internationalization working properly, since WPF and Silverlight aren't getting it right out of the box.

So here's my call to the WPF/Silverlight teams - please, for the love of doing what's right - have the StringFormat formatting default to the CurrentCulture rather than to its current default culture (en-US).  It only seems natural for an app to run on its CurrentCulture, unless the developer specifies otherwise.

The Microsoft response to this Connect ticket by closing it as "By Design" really disappoints me.  I can only hope that the Visual Studio team wakes up and realizes the importance of having WPF and Silverlight apps default to the CurrentCulture from an internationalization point of view.  This  "feature" of defaulting to "en-US" is more of a headache for those of us who do develop for an international audience and probably is just as much of a headache for my developer friends who aren't in an en-US culture.

Just my 2 cents, from a frustrated Silverlight dev...

 

Books.. Check 'Em Out!

July 15, 2010

Disclaimer: Although my work is related to the topic at hand, these are the thoughts of Sarah, the book junkie, and are not necessarily those of my employer.

Computerworld ran an article called "Beach Reads for Techies", where execs talked of books they're reading and books they'd recommend. I know some of you read something other than blogs... so I'm curious to see what others are reading. I'll go first.

Currently reading: I'm recently finished "God's Debris" by Scott Adams (recommended to me by Jeff). "The Religion War" - its sequel - just arrived from Amazon.com today.  

I had also recently finished some books by Malcolm Gladwell - specifically "Blink" and "Outliers".

From the fictional side of things, I've finished a bunch of Janet Evanovich and James Patterson novels, looking forward to reading some Candace Bushnell stuff.

Text-delivery medium of choice: Ever since I got my Sony Reader Pocket Edition in February, it's been more eBooks than dead-tree versions. Most of the books I check out are from my local libraries, but I also like getting the MEAP books from Manning.

Book(s) you'd most recommend to your blog readers: These books may not be technical, but they offer interesting perspectives on life and are written by characters who were key figures in my childhood. The titles I'm recommending - that I have on my bookshelf at work - are "It's Not Easy Being Green And Other Things to Consider" by Jim Henson and "Seussisms" by Dr. Seuss.

Tag, You're Up Next...

I know you guys read, so let's see what you're reading now.

As I've been working on a major Silverlight project recently, I was talking with some app devs, who kindly reminded me that I can't account for every click and every end user behavior. But I'm determined to user-proof my app as much as I can.  I want the user experience to be as enjoyable as possible.  (Yes, a UX tie... this is a Sarah on User eXperience - SUX - post in disguise.)  These are just some of the considerations that I've been thinking about wh ile working on my out-of-browser (OOB) Silverlight app.

How do I handle OOB behavior when the app is in-browser?

Silverlight in the browser really gets cranky when it sees those Application.MainWindow calls.  So I've had to make sure that OOB-specific calls are hidden away well enough that the in-browser side doesn't see them.  Of course, there's the Application.IsRunningOutsideOfBrowser Property - very handy for checking if the app is running OOB first before making those calls.

Of course, if the app is starting in the browser, some other things to consider include:

  • An in-browser interface.  What's the app going to do while it's in-browser?
  • How will the end user install the app?  Do you have them right-click on the app and install from the Install menu or do you add functionality to the in-browser app and use the Application.Install Method?
Once the app is OOB, how do I store user preferences?

As long as Application Storage is enabled on the client, look into Isolated Storage.  If that option isn't available, then you may want to look into storing the user preferences in a database.

What if I'm looking for a something I stored and get an error where the key isn't found?

Whenever you have a case where you're dealing with storage that a user could easily manipulate and - especially in this case - delete, make sure to use try-catch.

What if I have an app that needs to get data from an online source and the client's Internet connection dies?

More error checking... this time, look into the NetworkInterface.GetIsNetworkAvailable method.  Also, make sure to handle the NetworkChange.NetworkAddressChanged event.

These are just some of the questions that came to mind as I was figuring out how I was going to build the app.  Of course, this is just a small view of out-of-browser considerations that I've had to keep in mind.  Want to know more about Silverlight and its OOB support?  Check out the Out-of-Browser Support page on MSDN.

 

SUX: Silverlight Edition

June 16, 2010

Sometimes, things appear in the SUX (Sarah on User eXperience) series because they work contrary to my expectations. Silverlight is one of those things.

For a web technology, Silverlight is more an app developer's domain than a website developer's domain. It really requires an application development train of thought. In these past few weeks, I've been working on a Silverlight app and running into quirks that probably wouldn't have thrown me off if I spent more time writing apps rather than websites. However, I typically focus on websites more than apps, which is a slight paradigm shift. So imagine the frustrations I ran into with Silverlight, thinking that a web technology would be aligned with the web train of thought.

For one, they don't do margins the web way. Margins in the web world - think CSS attributes - are top-right-bottom-left. Margins in an app world (and in the Silverlight realm) are done left-top-right-bottom.

Another thing that required a little searching was finding a dropdown box. Yes, as a website developer, I'm used to the terms dropdown, DropDownList, or even the old <select> lists. But as I look at my toolbox, I'm not seeing any of those terms. Ah... but there's ComboBox, similar to the control I was familiar with back in my VB 6 days. Ugh... another app term, not the web developer term.

The last grumbling I have on this is the lack of transparent window support. Transparent PNG supported was enhanced in Silverlight 4, which I really like. But there still isn't any support for transparent windows. On this project, we would've loved to have a transparent window, especially on an out-of-browser app. Sure, we could've done this in WPF, where transparency is supported. But WPF on a Mac isn't supported - Mono doesn't have plans on implementing it. Silverlight, on the other hand, is supported on Macs, which is why we planned going this route. Until they port transparent window support from WPF into Silverlight, we'll work with the technology constraints and go with a custom chrome. But transparent windows would be awesome!

Thankfully, I'm getting around Silverlight a lot better than I anticipated, but I still need to remember that I need to treat it like an application tool and not necessarily a web development tool. Don't get me wrong - it is a web technology after all. But first and foremost, it is a subset of an application development tool, not a web development tool. Once I get that through my head, I understand why they went this route.

While I was looking at the Web Application Gallery that I have available via my DiscountASP control panel, I noticed an old familiar app on the list.  I did a double take, as I couldn't believe it.  Yes, one of the apps I used to play with back before I became a dev full-time - phpBB - is now available in the Web Application Gallery and also in the Web Platform Installer.

When I first heard about the PHP initiative that Microsoft was taking on, I was a little skeptical.  I have a PHP/MySQL background, and I know the stability on a Linux platform under Apache.  But PHP on Windows?  That sounds a bit strange.  Then again, I've also looked into Mono a bit - and .NET on Linux seems just as strange!

I have to admit that I'm quite excited to see PHP working on Windows.  I am looking forward to using some of the other PHP-based apps that I love - including WordPress and Joomla.  (At the time of this post, WordPress and Joomla appear in the Web Platform Installer, but they are not listed in my webhost's version of the Web Application Gallery.) I miss those apps, their ease of use and maintenance, and their stability.  I can only hope that the features I like get ported over.

We'll see over the next couple of years what the future of PHP + Windows has in store for us!  I'm excited to see where this will go!