Saturday, December 22, 2007

Quick and Dirty JSON

So you want to write a JSON service for your Silverlight application? Basically this entire thing is a giant hack. first JSON is just the string syntax for JavaScript so it is not like a real protocol of course I get a bit of heart burn calling 'SOAP' a real protocol but really a JavaScript array defintion being a 'protocol' you must admit is a bit of a stretch but ok I can go with it.
Anyway so quick a dirty in your 'Silverlight' web site project in visual studio you can create a JSON service out of any ASPX page. First 'create' your ASPX page. then remove everything so it looks like this:

< % @ Page Language="C#" AutoEventWireup="true" CodeFile="JSON.aspx.cs" Inherits="JSON" % >
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="JSON.aspx.cs" Inherits="JSON" %>


note that 'JSON' is just what I happened to call this page.
so then just right click on the page and click view code. You'll see that you have basically one method 'Page_Load'. here basically we just need to write out whatever it is we need in the form of a javascript array. So for example here is a very simple one:

StringBuilder JSON = new StringBuilder();

string ItemDelimter = string.Empty;

JSON.Append(ItemDelimter + "\"1\" : \"john doe\" ");

ItemDelimter = " , ";

JSON.Append(ItemDelimter + "\"2\" : \"jill doe\" ");

JSON.Append(ItemDelimter + "\"3\" : \"jane doe\" ");

JSON.Append(ItemDelimter + "\"4\" : \"jared doe\" ");

JSON.Append(ItemDelimter + "\"5\" : \"jeff doe\" ");

Response.Write("[ { " + JSON.ToString() + " } ] ");

Response.End();

Note that you'll need to add System.Text for the above code but you can basically generate the out put anyway you want and accept input parameters as query string values.

Full Length Movie Vie Silverlight

I'm ashamed to admit that I contributed in any way to this project... mind you I liked the Movielink team but the content is really really offesive in my opinion but the fact is that this is the first full length feature streamed via Silverlight to the masses. The player itself is straight forward and we un covered a few issues on the mac apprently in the underlying media stack in Silverlight but none the less a bug where about half way through the movie the sounds slowly gets upto a second off from the video... otherwise it works great :) if you must, you can check it out at:

http://blockbuster.jackassworld.com/

Friday, December 14, 2007

Testing for version of Silverlight

I was asked recently to about testing the version of silverlight on a project that only would support Silverlight 1.0. silverlight actually supports a method for doing just that and the complete documentation is online. That being the case however here is how todo it:

if( Silverlight.isInstalled("1.1") )
{
// do something.
}
else
{
// or not
}

or you could pass in '1.0' and the method returns true or false. Personally if this is an issue and you really need todo something other then run the silverlight install badge I would drop this into the initialization function your using.

Monday, December 10, 2007

BufferingTime Breaks Blend...

Ok, So Silverlight 1.0 is supposed to be out in the wild now and Expression Blend is like the coolest tool available for working with Silverlight Xaml especially if your a designer it gives you WYSIWYG and code. But alas having all of Silverlight actually not break Blend appears to be a bit unreasonable of an expectation still... not that I'm whinning but it seems that on a media element if you try to set the 'BufferingTime' property Blend will puke. According to the documentation this is defaulted to 5 seconds and the Silverlight Teams says that Silverlight try's to make an intelligent decision about this but if you actually try to tweak it your self as per the documentation it doesn't seem to do anything and blend blows up...

Wednesday, December 5, 2007

Silverlight Performance Testing

So it seems that alot of shops I run into as of late seem not to have done stress testing before... I know that this can't be the case normally but just in case I thought I would post something about pref testing silverlight.

With regard to Silverlight we need to break out pref into two areas. The abiltiy of the hosting infrastructure to server up component parts and do server side processing and then the how well the 'clientside' Silverlight application performs locally on any given client and browser combination. In most cases there would never ever be more then one instance of the application running side by side on any given client.

To do stress testing you can download something free like the MS Stress tool and record some nice test scripts and have a go at your server. Basically your hitting the box, filling informs and or clicking on links and the like and the tool uses that to simulate what your are doing but much faster to the point of failure on the server.

You can download the MS Stress Tool at:

http://www.microsoft.com/downloads/details.aspx?FamilyID=E2C0585A-062A-439E-A67D-75A89AA36495&displaylang=en

but there are a number of other tools such as :

http://jakarta.apache.org/jmeter/

that basically do the same thing.

Anyway when it comes to testing the client it is a matter of having a Mac and PC and all the browsers installed and then opening it up and testing everything. If the silverlight application is following the best practices such as those listed in the last post then it should be good and you can track down anything else on individual testing.

With that you should be armed to start doing some Silverlight perf testing.

Monday, December 3, 2007

Silverlight Best Practices

So in a web application from time immemorial the bottle necks have been the database access and the ability of the servers to server up whatever it is that is supposed to be servered. Granted there are things todo or not todo in Silverlight that affect usability and clientside perf but really its all about the server. For the most part the biggest 'gotcha' is usually making sure you are supporting the Xaml mime type and having reasonable archicture to support the expected load. All that aside there are some things you should avoid.

A-sync calls via Ajax or whatever are your friend. Why hold up the users experience to log something if you can just fire and forget. This will provide smoother and a more seamless experience for the user.

Use some reasonable coding conventions. It is more important to be consistent then wither or not to use Hungarian notation. Personally I like my script to look pretty much like my C# .NET code. That and considering main customer demographic of the clients of the company I work for... I'm feel safer using some nice stricked super OCD coding standard.

To keep the browser experience as uniform as possible among browsers it is a good idea to not todo things with the HTML DOM if possible and push things like timers etc into Silverlight.

In Xaml... don't stretch paths and videos. especially videos.

User techniques that simplify your code for example using a trinary operator.

In JavaScript use the prototype object declaration instead of writting a specific class. Object declared like this will be only maintain one reference in the global look up for the script engine nomatter how many instances are created. This way everyone is pointed at one base class instead of complete instances of every class N times.

If you drag and droping set none targets to IsHitTestable=false

dont dynamically add a bunch of stuff to the visual tree and leave it there if you not using it.

don't use windowless mode if you don't have to and if you do turn it off when not needed.