Archives / 2006 / June
  • ASP.NET Podcast Show #56 - I talk about Atlas and Load Testing

    So I finally got around to doing another Podcast. I have been quite busy working mostly on Atlas and making sure Wally keeps himself out of trouble. Hopefully you find it enjoyable. Please excuse my less than "radio like" voice.

    Subscribe - (Come on, commit.....)

    Download - (A casual fling can be fun too...)

    Show Notes:

    Personal Update

      • Work with Atlas
      • Getting a 4th degree black belt.
    • Work
    • Listener shout out to Peter Tassell
    • Web Load testing
      • Load testing for 10,000 concurrent users
      • Visual Studio Team Test, Perfmon, Excel
      • Strengths/likes, difficulties
      • Why 10,000 concurrent users?
      • Ideal setup of test rig
      • Setting up controllers, test agents
      • Automated recording and gathering of test data
      • Scheduling tips


  • WWW = Wally's Wonderful Webcast

    Yeah corny title I know, but good friend Wally McClure has done a webcast ( on Atlas which you may want to check out. It covers quite a bit of ground and goes further than a lot of the current webcasts which cover the simpler aspects of Atlas.

    Plus he threatened to call me everyday if I dont post a link to his webcast :-)

    Just kidding, check it out. Lots of good information.


  • Woohoo - Vista Error

    So I loaded up Vista on my laptop to show my 15 year old son what it looked like before I blew away the partition it was residing on. It loaded up, I logged on and walked away so he could have a look around the new Windows OS.

    I heard a "Woohoo!" coming from my office where the he was using my laptop, then a series of "Wohoo's!", about 4 or 5 actually. I thought, "Wow, he must really like it". I went up and had a look to see what he was doing to find him staring at the screen at this error message:

    So initially, he did like it and did say "Woohoo" for this very reason. Then this error dialog box pops up in the middle of the screen. He thinks it must be some voice recognition thing and proceeds to say "Woohoo!" a couple more times to try and entice it to keep displaying.

    You can imagine my amusement.....


  • New podcasts, HDTV, Atlas Password Strength Extender

    I was supposed to get a new ASP.NET podcast done this weekend, but have only done it partialy and not complete yet. It will contain some information around my new Atlas control extender I am working on and also some info around web load testing using Visual Studio Team Test. I worked on a project that had to simulate 10,000 concurrent users using a web farm of servers and client PC's so I am going to talk a little about that. Alas, the podcast is not quite there yet. I hope Wally forgives me.

    I also recently purchased a bargain HDTV compatible rear projection TV. 120cm (47 inch), 1080i HDTV compatible for around $1000 (AUD). A bargain if you ask me. This weekend I purchased a HDTV tuner and can now watch all the free to air TV stations in all their 120cm high def glory. All for a total of $1300 AUD which is pretty cool and looks great. Note that the rear projection TV is not quite as good as the LCD type TV's, but they still cost a fortune for anything really large.

    My Xbox 360, although HDTV capable, does not output a HDTV compatible signal for this TV as apparently, the 360 outputs HDTV at 60Hz, and this particular TV only accepts HDTV signal at 50Hz (although the HDTV tuner works without a hitch) so I can only play 360 games at 480p, not 1080i. Bit of a shame but it still looks quite good, and am not complaining too much coz the TV was such a good price. Its a known issue with this particular TV and the 360.

    For those wondering if HDTV is worth it, the picture quality is outstanding compared to regular TV. Even SDTV would be pretty good compared. The tuners can still be quite expensive, although I was hard pressed finding any differences between tuners priced @ $300 and tuners priced at $600. In the end, I bought a $300 tuner, with DVI outputs (for my next TV....:-) ) and it works great.


  • DotnetSlackers community - using Atlas juice.

    I have been poking around at DotNetSlackers ( lately and looking at some of the new content being offered there. DotNetSlackers is a recent community site developed by MVP Sonu Kapoor and has caught my attention because I have been heavily involved in Atlas lately, and DotNetSlackers has some new Atlas related content on there. There are some new controls developed by Garbin who is extremely knowledgable when it comes to Atlas stuff. Not only has he put up 2 Atlas controls with source code, but he also offers his mashup site that has been developed with Atlas, with full source code.

    The 2 controls are a "Five Star Rating" control and an "Image Zoom" control, all of which are being used on DotNetSlackers so you can see it in a production environment.

    There are some forums as well where Garbin is participating and answering Atlas related questions. Since Atlas documentation is still a bit thin right now, I try and look at everything that helps me work with Atlas and DotNetSlackers is helping me along the path.


  • Atlas databinding and Custom transformers

    In Atlas, its very easy to delcaratively perform databainding between 2 controls, or a control and some datasource such as a web service.

    For this example, lets assume we have 2 simple textboxes. Lets also assume that we have an exchange rate and we want to convert values between the 2 textboxes based on this exchange rate. We will make use of Atlas databinding and a custom transformer to achieve this task.

    Our textbox markup would look something like this:

    <asp:TextBox ID="txt1" runat="server"></asp:TextBox>
    <asp:TextBox ID="txt2" runat="server"></asp:TextBox

    Using Atlas declarative (XML Script) code, we can databind these 2 textboxes so that changes in one are reflected in the other. The declarative/XML Script to do this is:

    <textBox id="txt1">
        <binding id="b1" dataContext="txt2" dataPath="text" transform="myTransform" property="text" transformerArgument="ONE" direction="Out" />

    What we have said with the above binding is that we are using the 'txt1' textbox as the owner control. The direction if "Out" means that the owner (in our case txt1) will act as the source of the data. We would set the direction to 'In' which would cause the owner (txt1) to act as the target for our operation. Optionally, we could also use a direction of 'InOut'. The dataContext and dataPath properties refer to the input data, in this case the property 'text' of the control 'txt2'. The 'property' attribute of our binding specifies what property on the owner (txt1) the input data is bound to.

    We have also setup an identical binding but for our other textbox. The net effect being whatever is typed into one textbox, is reflected in the other.

    <textBox id="txt2">
        <binding id="b2" dataContext="txt1" dataPath="text" transform="myTransform" property="text" transformerArgument="TWO" direction="Out" />

    Just copying over what is typed is not very interesting though. We have specified an additional 2 attributes on each binding. 'transform' and 'transformerArgument'. Atlas comes with some predefined transforms such as 'Add, mutiply, toString' and others (see the Atlas doco for a complete list). For this example, we could probably use one of the built in transformers, but lets do a custom one, just for the hell of it. The 'transform' attribute specifies a handler to call when the databding occurs, the 'tranformerArgument' is passed to the handler during this call. The handler looks like this:

    function myTransform(sender, e)
      var txt1Amt = $object('txt1'
      var txt2Amt = $object('txt2l'
      var result = ''
      var _exchangeRate = 0.75;

    (!isNaN(parseInt(txt1Amt)) || !isNaN(parseInt(txt2Amt)))
        // We multiply the value with the exchange rate
        if (txt1Amt != '' && e.get_transformerArgument() == "ONE"
          result = (txt1Amt * _exchangeRate);
        // We divide the value with the exchange rate
        if (txt2Amt != '' && e.get_transformerArgument() == "TWO"
          result = (txt2Amt / _exchangeRate);
      // Set the result of this binding event argument which is the result of this binding
      // transformer routine.

    Sure, its not the most elegant code, but it shows how easy it is to define your own transformer routines, and parse the tranformer arguments specified within your Atlas declarative bindngs.

    Hopefully, thats helped others understand and get started with custom transformers and declarative bindings. All this can be done imperatively/via client script as well, but thats a post for another day.


  • Blowing my own Trumpet

    On a completely non technical note, but something I am pretty happy with is managing to finaly pass my 4th degree black belt grading in Budo Jitsu just yesterday. Its a fairly long grading thats goes for around 4-5 months. At 3rd dan and above, its very technical, with me (and my training partner) having to hold 3 seminars, organise the material, know it inside out and be able to demonstrate it, market the seminars and a whole bunch of stuff for the 4 months. Then on the last month, we have some time to prepare a short demonstration of all the techniques, with some imprompt demonstration of favourite techniques thrown in.

    Its certainly long, and I am glad to finally have gotten through it.