Archives / 2005 / December
  • Accessibility / Section 508 with AJAX/Atlas

    When people talk about Accessibility, I think of Section 508 and allowing blind/disabled people to use an application.  I put this small test of Atlas together for a blind friend of mine to test.  It is at  It seems that the applications runs find and he is able to see/hear the content using JAWS (  So, the question is, what's the cause of the accessibility discussion with Atlas?  What are the issues?  I hear discussion but not statement of the issues.  Any information that you can provide would be appreciated.

  • ASP.NET Podcast Show #32 – Reflections of 2005 & Using a DataTable in “Atlas”

    Check out the post as it was meant to be viewed, on the The ASP.NET Podcast Site.

    Subscribe - Exciting!  The highlight of any day.

    Download - Snore, boring.


    Can't let Paul get the last word in.


    Wow, I didn't know if we would make it this far and what kind of form we would have ended up in.  I wanted to take some time to go thru and look at some of the really cool events of 2005.


    • Got my ASP.NET MVP reawarded.
    • Charlotte to do a talk.  Scott Forsyth and Orcsweb.
    • What does it take to do webcasting?
    • School Board.  Wanted to build a new school in our area and threatened us with condemnation.
    • ADO.NET book continued forward.
    • Contract and negotiations.


    • .NET CTP.
    • More with the school board.  Cooler heads finally prevail.
    • ADO.NET book continues forward.  Final large chapter is in.
    • Project work in DC starts back up.


    • Chattanooga to do a talk.
    • Project work in DC ramps up some more.
    • ADO.NET book changes.


    • Birmingham to do a talk.
    • Jason Salas and the Digital Pontification.
      • Sir Wally.
      •  ASP.NET Podcast.  (Me, Paul, Buddy, Jason, Robert McLaws).
    • Final chapter is in.
    • Get a new co-author.
    • .NET 2.0 beta2 and Sql 2k5 with the updated ADO.NET InProc Provider changes.
    • What is this AJAX thing?


    • I do my first podcast and yes, the motorcycle will be here forever.
    • DC codecamp.
    • My first codecamp. Atlanta.
    • My first SDR @ MS.
    • Sir Wally wins the Database Geek of the Week award. 


    • First round of edits for the ADO.NET book.
    • ScottGu – Atlas – WTF is AJAX?
    • Paul starts in on the podcast.
    • June CTP of Sql Server 2k5.


    • More podcasts.  Hey, you have to do something in the hotel room.
    • Shot 71 in golf.  WTF?
    • Sang the GT fight song on DP.
    • Edits on the ADO.NET book.
    • Went to the IIS7 devlab.
      •  Probably embarrassed myself a ton.
      • Questions.
      • Lunch with Shanku and Rich – more questions on Atlas.
    • Wrote my first http handler.
    • Go approval for an AJAX with ASP.NET book.


    • More podcasts.  Hey, you have to do something in the hotel room.
    • Work continued in DC.


    • Final edits for the ADO.NET book.
    • First Atlas downloads.
    • Podcasting continued.


    • ADO.NET Book is out of our hands.
    • ASPInsider Summit.
      • Spang.
      • Atlas.
      • Enjoyed the whole experience with everyone.
    • Writing started on the AJAX with ASP.NET book.
    • Turned in some chapters even.
    • Alabama Codecamp.


    • Nov 7, 2005 – VS.NET and Sql2k5 ship.
    • site is up, thanks to Scott Forsyth and Orcsweb.
    • New Atlas build.
    • User Group talk on Atlas.
    • Ready to go with an application.  ($500k vs. $86k)
    • Turned in a chapter on AJAX. (XML).


    • New Atlas build.
    • Holidays.
    • Kids basketball.
    • Chapter writing continues on Atlas.

    People that I have met or remet along the way.

    MS people.

    • Rich Ersek.
    • Scott Guthrie.
    • Shanku Niyogi.
    • Nikhil Kothari.
    • Pablo Castro.

    Wilco Bauwer.

    David Yack.

    Ambrose Little.


    Bill Ryan.

    Jason Salas.


    • Rob Chartier.
    • Chris Frazier.
    • Jason Gaylord.

    Craig Shoemaker.


    Frappr Map.  Goto the podcast site and get in on the fun.

    Send me your pictures for the listener gallery.


    Iterating through a DataTable in Atlas.


    getItem(i) for the rows.

    getProperty(“Column Name”) for the column.

            function MethodReturn(result)


                var i = 0;

                var str = "";

                var strRowsInfo = "";

                var strReturn = "<br />";

                //get a datatable

                var tbl1 = result.getItem(0);

                for(i = 0; i < tbl1.get_length(); i++)


                    //tbl1.getItem(i) will return the ith DataRow

                    //getProperty("Column Name") will return the column value from a DataRow

                    strRowsInfo += tbl1.getItem(i).getProperty("ProjectName") + strReturn;


                document.getElementById("RowInfo").innerHTML = strRowsInfo;


  • Get column information from a DataTable with Atlas

    Ok, assuming you have some datatable and you are using Atlas, you can get the datatype of your datacolumn object in Atlas.  You can call the get_dataType() method on your datacolumn.  Kinda cool.  I've been trying to go over the Web.Data namespace recently in Atlas.

  • Please quit with the continual product pimping

    I realize that some people here want to get a free copy of some stuff and pimp products.  Heck, I do it at times and even get way off technical topics, but this continual repost of the exact same thing is annoying.  I realize that the vendor wants you to put up a post on your blog, but geez, the same dry generic post that the vendor gives you is just a little bit too much.  We had this problem about 12-18 months ago and it got ugly then.  I would accept a product review.  If you like the product say so. The same dry advert from the vendor should not be just blindy copied to your blog.

  • Read the Atlas Manual (RTAM)

    I've been posting what I thought were dumb questions in the atlas forums.  I thought this even though there is currently a real lack of documentation.  Either last last night or early this morning, it hit me just open up the debug version of the AtlasRuntime.js file.  I've learned a lot just opening up the js file.  Read The Atlas Manual = RTAM.  Its been very enlightening today.


  • ASP.NET Podcast Show #31 - Paul on WSE3 site.

    Subscribe - The Wally Way to do things.  Cool.  Hip.  Get iTunes or iPodder.

    Download – The Not-Wally Way to do things.  Uncool.  Boring.Show Notes

    - Many thanks to all our listeners
    - Merry Xmas
    - A very quick look at 2005
    - The ASP.NET AJAX book (yes....again)

    - Tech Talk on Web Service Enhancements 3 (WSE3)
    -- Security implementation guidance doc recently released
    -- Service Principal Instructions

    grab the SETSPN.EXE tool from the windows resource kit tools
    >> SETSPN {principalName} {accountName}
    >> setspn HOST/{machine} DOMAIN\account
    >> setspn HOST/{machine} DOMAIN\account
    >> setspn HTTP/{machine} DOMAIN\account
    >> setspn HTTP/{machine} DOMAIN\account


    Client Code for WSE3
    - UsernameForCertificate

    MyWSE3ServiceProxy svc = new MyWSE3ServiceProxy();
    UsernameToken tok;
    // If the user token is sent in plain text, then the TokenManager will try and
    // authenticate against the ActiveDir/LocalMachine automatically.
    tok = new UsernameToken("username", "password", PasswordOption.SendPlainText);

    To set the target principal in code use:

    string targetPrincipalName = "HTTP/" + System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).HostName;
    KerberosToken kerbTok = new KerberosToken(targetPrincipalName);

    and via the wse3policycache.config file use:
        <kerberosSecurity establishSecurityContext="false" renewExpiredSecurityContext="false" requireSignatureConfirmation="false" messageProtectionOrder="SignBeforeEncrypt" requireDerivedKeys="false" ttlInSeconds="300">
       <kerberos targetPrincipal="host/MYPC" impersonationLevel="Impersonation" />
            <request signatureOptions="IncludeAddressing, IncludeTimestamp, IncludeSoapBody" encryptBody="true" />
            <response signatureOptions="IncludeAddressing, IncludeTimestamp, IncludeSoapBody" encryptBody="true" />
            <fault signatureOptions="IncludeAddressing, IncludeTimestamp, IncludeSoapBody" encryptBody="false" />

  • Updating to the new December, 2005 Atlas TP

    If you are updating from the October TP to the December TP of Atlas, you will want to make changes to your web.config file to get the stuff to work.  I had a pretty generic web.config, so I was able to just copy stuff over.  You may have a little bit more to do depending on the complexity of you web.config.

  • Calling Sequence in Atlas

    I just tried something new in Atlas.  Let's say that I want to specify a callback on completion and a callback on an exception on the server, but not a callback on a ServerTimeOut.  Its as easy as I thought.  This code seems to do it.  Passing a null to the callback method parameter seems to work correctly.  If you have an suggestions, let me know.

  • AtlasRuntime.js

    It looks like if you just want to communicate with the web server over an AJAX style connection to the Web Server, all you have to use is the AtlasRuntime.js.  I used
        <atlas:Script ID="Script6" runat="server" Path="~/ScriptLibrary/AtlasRuntime.js" />
    to replace
        <atlas:Script ID="Script1" runat="server" Path="~/ScriptLibrary/AtlasCompat.js" Browser="Mozilla" />
        <atlas:Script ID="Script2" runat="server" Path="~/ScriptLibrary/AtlasCompat.js" Browser="Firefox" />
        <atlas:Script ID="Script3" runat="server" Path="~/ScriptLibrary/AtlasCompat.js" Browser="AppleMAC-Safari" />
        <atlas:Script ID="Script4" runat="server" Path="~/ScriptLibrary/AtlasCore.js" />
        <atlas:Script ID="Script5" runat="server" Path="~/ScriptLibrary/AtlasCompat2.js" Browser="AppleMAC-Safari" />

  • Atlas/AJAX Javascript proxy

    This is kinda cool.  I have created a web service.  It's fairly simple and just returns a DataTable.  I wanted to see what the Javascript proxy looks like in Atlas so I just requested the following url, note that I am using .NET 2.0 and the local dev web server:

  • The law of small numbers..........

    Frans pointed out the article about percieved Java decline.  Reading the article reminds me of the "Law of Small Numbers."  In this law, percentage changes are skewed because of the size of the population.  For example, and increase from 100 to 125 is only a 25% increase.  An increase from 25 to 50 is a 100% increase, yet the same increase occurred in both situations.  The 100% increase is somewhat misleading because the increase is based on a number that is one-fourth the size. 

  • ASP.NET Podcast Show #30 - Minimizing the ASP.NET ViewState Part #2

    Subscribe - The Wally Way to do things.  Cool.  Hip.  Get iTunes or iPodder.

    Download – The Not-Wally Way to do things.  Uncool.  Boring.

    Check us out on the ASP.NET Site.

    Show Notes:

    Scott Allen isn’t the only person that needs more Wally.  We got an email from Bruce Dickinson.  He says “I got a fever, and the only prescription is more Wally!”  He has got to have “more Wally.”  You need to listen to the ASP.NET Podcast.

    Correction from the previous podcast.  DnD in Atlas does work, its just not documented well at this moment.  Thanks to Wilco Bauwer.

    As we get into the Holiday Season, whether it is Christmas, Hanukah, Kwanza or something else, we need to look at how we act towards each other. 

    As some of you know, there has been a lot of public discussion back and forth in the .NET community in South Carolina.  I have had some amount of a little bit of knowledge about this as one of the people involved is a buddy of mine and worked on our ADO.NET book.  As I watched the issues play out, I looked at myself.

    Hard for technology people to work with each other.

    We strike out at each other.

    I’ve done it.

    I’ve had it done to me.

    How should we act?  We need to be open and honest without being rude to each other.  Learn how to work together.  Learn how to pump people up instead of pushing people down.  There are plenty of people that want to push you down.

    SavePageToPersistenceMedium code:

    string strViewStateKey = this.CreateFileName();

    string FileDir = GetConfigInformation();

    CleanUpInfo cui = new CleanUpInfo();

    cui.Dir = FileDir;

    cui.TimeOut = 60*60;

    ThreadPool.GetAvailableThreads(out iMaxWorkerThrds, out iMaxIOThrds);

    if (iMaxWorkerThrds > giMinimumThreads)


                ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(CleanUpFileDirectory),cui);



    RegisterHiddenField("__VIEWSTATE_KEY", strViewStateKey);

    RegisterHiddenField("__VIEWSTATE", String.Empty);

    strViewStateKey = System.IO.Path.Combine(FileDir, strViewStateKey);

    LosFormatter los = new LosFormatter();

    StringWriter writer = new StringWriter();

    // serialize the view state into a base-64 encoded string

    los.Serialize(writer, viewState);

    // save the string to disk

    StreamWriter sw = File.CreateText(strViewStateKey);




    string ViewStateFile = System.IO.Path.Combine(Server.MapPath(GetConfigInformation()), Request.Form["__VIEWSTATE_KEY"]);

    LosFormatter los = new LosFormatter();

    StreamReader reader= File.OpenText(ViewStateFile);

    string viewStateString = reader.ReadToEnd();


    obj = los.Deserialize(viewStateString);

    Cleanup Routine:

    int i = 0;

    CleanUpInfo cui = (CleanUpInfo)obj;

    string strDir = cui.Dir;

    double dblTimeOut = -cui.TimeOut;

    DirectoryInfo di = new System.IO.DirectoryInfo(strDir);

    FileSystemInfo[] fileInfo;

    fileInfo = di.GetFileSystemInfos();

    for(i = 0 ; i < fileInfo.Length; i++)




                            if ((fileInfo[i].CreationTime < (DateTime.Now.AddSeconds(dblTimeOut))&&

                                        (fileInfo[i].Name != gErrorName)))





                catch(System.UnauthorizedAccessException uaeExc)









    private static void LogError(System.UnauthorizedAccessException uaeExc)




    private static void LogError(System.Exception sysExc)


                string FileDir = GetConfigInformation();

                string strErrorLog = gErrorName;

                string strFileName = System.IO.Path.Combine(FileDir, strErrorLog);

                StreamWriter sw = new StreamWriter(strFileName, true);

                sw.WriteLine("Time: " + DateTime.Now.ToString() + ", Exception message: " + sysExc.Message.ToString());


                sw = null;


  • AJAX is a hard concept for web developers to "get"

    One of the things that I am finding is that the vast majority of web developers don't "get" the concept of communicating with a web server outside of the traditional "round trip/postback."  We have lived so long in communicating with the server in a roundtrip, that anything else is a really hard concept to get and seems to require a "rewiring of our brain cells (including mine)." 

  • ASP.NET Podcast Show #29 - Atlas User Group Talk

    Subscribe - The Wally Way to do things.  Cool.  Hip.  Get iTunes or iPodder.

    Download – The Not-Wally Way to do things.  Uncool.  Boring.

    ASP.NET Podcast Site.

    Note: The audio of the questions from the group is lacking.  I have attempted to improve those sections of the audio file, but it still may not sound quite right.

    Show Notes:

    On November 29, 2005, Wally did a talk to the Knoxville .NET User Group on the subject of Microsoft's Atlas.  The powerpoint slides from the talk.

    Scott Forsyth of ORCSWeb is the Database Geek of the Week.

  • The CIA (or FBI, or somebody else) isn't really after you

    If you have gotten the emails about the CIA (or other government organization) being after you because your ip address has been detected on illegal sites, just delete the email.  Don't open the attached file or you will be infected.  It is NOT from the CIA (or other government organization).  Its just another social-engineering trick to try and get you to install a virus.  I believe that this virus is referred to as "Sober X."