Coding Geekette

100% girl geek, all the time

New Year, New Goals…

With 2011 arriving, this means that it’s time to figure out what I want to focus on this year.  Here are a few things I’m looking into:

  • Silverlight – no, it’s not going way.  No, it’s not dying.  It’s still around, and I’ve got a bit of work to do with it.  So I’m looking forward to becoming a bit stronger with it this year.
  • TDD – ah yes, the current hype in software development.  I’m finally coming around to figuring out how I can apply it to work and how to really understand it well.  This is the main thing I’m looking forward to learning about at CodeMash.
  • Windows Phone Development – I have some app ideas that I’d like to build, and later this year, when my time frees up a bit more, I hope to get them out there.
  • PowerShell – I’ve always had a love of scripting, and PowerShell just brings out that love even more.  All that wrediting I talk about on Twitter is writing and editing a book on PowerShell that’s due out later this year.  I’ve learned quite a bit while writing, and I’m looking forward to building more custom cmdlets to help my fellow co-workers and maybe even the community.  We’ll see what happens when my time frees up again.
  • Agile – finally getting into this a lot more.  I’m excited because this process meshes better with my natural software development tendencies, much better than a chaotic waterfall.  I have a feeling I’ll pick this up quickly.
I’m also hoping to be involved in the community a bit more.  Some of the events I’m looking forward to in 2011 include:
I have a few other plans I want to tackle, but you’ll just have to wait and see what comes out from me later this year!
Do you have any goals for this year?  Have you blogged about it?  Leave me a comment here!

 

No Comments »

Saving Details in Silverlight with Roaming Profiles

As I’m working on my Silverlight app and releasing it in the wild, I’m finding some cases that I would not normally deal with as a website developer.  The latest gotcha has been saving user settings.

So going back to my GiveCamp app idea… let’s say that I want to give the end user a way to set a default GiveCamp.  I would need that piece of information stored somewhere.  I figured Isolated Storage would be a great spot for saving the data.  However, Silverlight doesn’t support roaming profiles.  Normally, I wouldn’t be concerned about that; I remember the headaches of roaming profiles from when I worked IT and I would love to chalk it up as yet another issue with roaming profiles.  But there’s another part of me that wants to be able to save this data even if my end users are cursed with roaming profiles.

I’m sure I’m not the only Silverlight dev out there who’s run into this.  Are there others out there who have run into the roaming profiles issue?  If so, what have you done to make your app accessible to users bound by roaming profiles?

2 Comments »

Follow up to “Stringing Along … in Silverlight”

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.

No Comments »

Stringing Along to Disappointment in Silverlight

 

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…

 

No Comments »

Thought Processes from a Silverlight OOB App Dev

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.

 

No Comments »

SUX: Silverlight Edition

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.

No Comments »

Silverlight 4 – Webcam Permissions Out of Browser?

While playing around with Silverlight 4 and working on my demos for my talk on Tuesday at the Cleveland WPF User Group, I came across a peculiar situation.

I’ve got a webcam demo and wanted to see just what I could do with it to add my touches to it.  Of course, being the curious one, I had to wonder… “What if I denied access to my devices?  How does this really work?”

My setup, for reference:

 

And the permissions:

 

 

 

From what I was able to find out in my testing, it looks like the permissions work properly when in the browser (using Google Chrome).  However, when I run this as an out-of-browser app, it looks like the permissions are getting ignored.

Here’s my app in the browser:

 

And when it’s outside of the browser, I get this:

 

 

Is this really how these permissions are supposed to be working?  Am I missing something?  As an end user, if I told an application not to use my webcam but installed it to my desktop for other cool features (maybe an enhanced Twitter client or something), I wouldn’t want it to access my webcam.

* Edited 5/16/2010, 1:32AM Eastern Time*

So after seeing Dave Swersky‘s comment and looking into some other configurations, this is what I found out:

 

  • Webcam/mic permissions apply in-browser as expected
  • Webcam/mic permissions apply as expected when out-of-browser without elevated permissions.
  • Explicit webcam/mic deny permissions are being ignored when out-of-browser with elevated permissions.
So if I wanted to do an enhanced Twitter client with webcam/mic access and have a quirky end user who denies access to those resources, their quirks will be raised if they run the app out-of-browser, because chances are high that I’ll be creating an app with custom chrome, which needs elevated access to work.  

 

No Comments »