January 2006 - Posts

ASP.NET Podcast - Show #36 - Personal Web Site Starter Kit
Monday, January 30, 2006 9:25 PM

Ok, so I have actually got busy and managed to do a podcast. The main content on this one is about some good and bad points on the personal web site starter kit that is available for .Net 2.0. I have recently used it to create my new site at http://www.theglavs.com and thought I would share some impressions of it, its internals, and how it held up for me.

Subscribe to the podcast or direct download.

Full show notes:

- My 1st Podcast for 2006
- A little on Atlas in user controls and getting Atlas info
- A little more on tactical and strategic solutions previously mentioned by Wally
- A sydney weather report
- Visual Studio 2005 - Still a bit rough around the edges?
- Personal Web Site Starter Kit (available
http://msdn.microsoft.com/vstudio/express/vwd/starterkit/default.aspx)
- My site which uses a customised version of the Personal web Site Starter Kit
http://www.theglavs.com
-- What was good, what was bad, what I did to customise it, migrating it to a full SQL Server depoyment.

Cool Webcast: CLR Method Dispatch Internals: From Static to Dynamic
Sunday, January 29, 2006 7:46 PM

This might be old news to some so I'm sorry if its a repost, but this webcast is excellent at showing some of the internals of method invocation, reflection, and some of the new lightweight code generatin features of .Net 2.0.

Starts Joel Pobar and Joe Duffy

Link is here http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20051103CLRJP/manifest.xml )

So next time your at a party and want to impress your friends, you can quote things like the call, calli and callvert IL instructions, as well as get the party really rockin by listing the performance characteristics of static and dynamic invocation methods.

by Glav | with no comments
ASP.NET Podcast Show #35 - Michael Mahemoff of AjaxPatterns.org and SoftwareAs.com
Sunday, January 29, 2006 7:40 PM

ASP.NET Podcast Show #35 - Michael Mahemoff of AjaxPatterns.org and SoftwareAs.com

Wally interviews Michael Mahemoff who is a fellow Australian and well known AJAX dude.

Subscribe to the show or simply do a direct Download

Link to ASP.NET Podcast Site.

Show Notes:

by Glav | with no comments
ASP.NET Podcast - Show 34
Sunday, January 22, 2006 3:38 PM

Wally does another good job on the latest podcast, this time talking about some database concepts that everyone should be aware of. Some of the concepts may be basic or common knowledge to some, but could be news to others. Enjoy.

Subscribe or Download

Podcast site blog entry.

Show Notes:

  • Coach Wally.
  • Bruce Dickinson returns.
    • Explore the space of being Wally.
    • You really want "More Wally" in the show.
  • Paul Lockwood reviews podcasts.
  • Oprah Effect? What about the Wally Effect!
    • People all over the world.
    • Amazon.
    • Google Adsense.
  • Wally begs you to help out.
  • Interesting findings - Wally whines about paying big bucks for big companies but won't pay less for smaller companies.
  • OrcsWeb.
  • Wallyisms review.
  • Database Performance and Tuning.
    • Proper database design.
    • Primary keys are good.  I like integer data types.
    • Foreign keys.  FKs are used to relate data like customers and orders or Orders and order items.
    • Normalization is good.
    • Indexing is REALLY, REALLY important.
    • Sql Server Profiler.
    • Database Tuning.

    • What happens when you don't have a good database design and proper indexing? Bad things.
by Glav | with no comments
DOMValidators and Firefox
Sunday, January 15, 2006 6:53 PM

Sometime ago, I released a set of free set of controls called the DOMValidators ( available here http://www.theglavs.com/DownloadItem.aspx?FileID=28) that are a set of client side validation controls that basically mimic the validators that come with Visual Studio.NET 2003 except that they work in many other browsers apart from just Internet Explorer.

At least once a week, I get an email from somebody asking why they do not work in Firefox. The reason is that they were developed prior to the release of Firefox. In order for Firefox to be recongised as an uplevel browser (which causes the appropriate Javascript to be generated for client side operation), an entry must be added to the web.config <browsercaps> section. This is shown below so that you can copy and pase it in.

<case match="^Mozilla/5\.0 \([^)]*\) (Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))?">

                                browser=Gecko
                                <filter>
                                        <case match="(Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))">
                                                type=${type}
                                        </case>
                                        <case> <!-- plain Mozilla if no VendorProductToken found -->
                                                type=Mozilla
                                        </case>
                                </filter>
                                frames=true
                                tables=true
                                cookies=true
                                javascript=true
                                javaapplets=true
                                ecmascriptversion=1.5
                                w3cdomversion=1.0
                                css1=true
                                css2=true
                                xml=true
                                tagwriter=System.Web.UI.HtmlTextWriter
                                <case match="rv:(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))">
                                        version=${version}
                                        majorversion=0${major}
                                        minorversion=0${minor}
                                        <case match="^b" with="${letters}">
                                                beta=true
                                        </case>
                                </case>
                        </case>
 
This set of changes was actually submitted by a user of the DOMValidators who provided some feedback to me (in this case Tim Conama but there have been many others). I have to say that some of the users have been really helpfull in providing feedback and fixes to various bugs so to those who have done this, a big thank you.
 
Your probably thinking, "Why dont you just update the controls to include this?". Well I could, but a) I am lazy and b) these controls have been superseded by what is available in VS2005 so I dont really want to put much effort into these. There are a number of other issues that need to be resolved with the validators, and if I start modfying them, I'll get carried away and spend way too much time on them. A lame excuse? Yeah it is, but I have been called a lot worse things than lame before . . .
 
ASP.NET Podcast Show #33 - MSMQ
Wednesday, January 11, 2006 1:32 PM

Wally has done another good job, this time concentrating on the Microsoft Message Queue in .Net apps.

Original URL: http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2006/01/10/71.aspx

ASP.NET Podcast – Show #33 - MSMQ

Subscribe

Download

Show Notes:

Welcome to the First Show of 2006.
More Wally in your life.
Wally got his MVP Award for 2006 and goes off on a tangent about what an MVP is.
Wally (and all newly awarded MVP's) get a really cool laptop bag as a present.
The “Beginning AJAX with ASP.NET” book is coming along.  Paul, Scott, and I are hard at work.
Who is Bruce Dickenson and why does he send me strange emails?  Do you know why?

What do words mean in IT?

  • Strategic.
  • Tactical.
  • Opportunity.
  • “Stepping up to the plate.”
  • “Stepping into one”/”Taking one for the team.”

MSMQ

Class:

        [Serializable()]
        public class cSearchResults
        {
            public string Url = String.Empty;
            public string ServerName = String.Empty;
            public long Id = 0;
            public string UrlText = String.Empty;
            public DateTime DateSearched;
        }

Sending a Message:

Simple:

      public static void StoreSearchUrl( string pstrCn, string pstrUrl )
            {
                  MessageQueue mq = new MessageQueue(gstrQueueForSearchUrl);
                  mq.Send(pstrUrl);
                  mq.Dispose();
                  mq = null;
            }

 

Class:

            MessageQueue mq = new MessageQueue(gstrQueueForSearchResults);
            cSearchResults objRes = new cSearchResults();
            try
            {
                  objRes.UrlText = pText;
                  objRes.Url = pstrUrl;
                objRes.Id = plngUrl;
                objRes.DateSearched = DateTime.Now;
                mq.Send(objRes);
            }
            finally
            {
                  mq.Dispose();
                  mq = null;
            }

Receiving a Message:

Simple:

                gMQSearchUrl = new MessageQueue();
                gMQSearchUrl.Path = gstrQueueForSearchUrl;
                gMQSearchUrl.Formatter = new XmlMessageFormatter(new string[] { "System.String, mscorlib" });
                gMQSearchUrl.ReceiveCompleted += new ReceiveCompletedEventHandler
this.MQ_ReceiveCompleted_ForSearchUrl);
                gMQSearchUrl.BeginReceive();

...............

private void MQ_ReceiveCompleted_ForSearchUrl(object sender, ReceiveCompletedEventArgs e)
{
      // Add code here to respond to message.
      //new XmlMessageFormatter(new String(){"System.String, mscorlib"});
      System.Messaging.Message msg = gMQSearchUrl.EndReceive(e.AsyncResult);
      msg.Formatter = new XmlMessageFormatter(new String[]{"System.String, mscorlib"}); 
      string strBody = (string)msg.Body;
      try
      {
            StoreUrlInSearchUrl(strBody);
      }
            //Exception handling code
     finally
      {
            if ( this.gblRunStatus == true
            {
                  gMQSearchUrl.BeginReceive();
            }
            msg.Dispose();
            msg = null;
      }

Class:

                gMQSearchResults = new MessageQueue();
                gMQSearchResults.Path = gstrQueueForSearchResults;
                gMQSearchResults.Formatter = new XmlMessageFormatter(new Type[] { typeof
WebSearch.cSearchResults) });
                gMQSearchResults.ReceiveCompleted += new ReceiveCompletedEventHandler(this.MQ_ReceiveCompleted_ForSearchResults);
                gMQSearchResults.BeginReceive();
........................

        private void MQ_ReceiveCompleted_ForSearchResults(object sender, ReceiveCompletedEventArgs e)
        {
            // Add code here to respond to message.
            System.Messaging.Message msg = gMQSearchResults.EndReceive(e.AsyncResult);
            WebSearch.cSearchResults cSearchRes;
            try
            {
                  msg.Formatter = new XmlMessageFormatter(new Type[] {typeof(WebSearch.cSearchResults)}); //= new XmlMessageFormatter(new Type() {GetType(WebSearchSupport.cSearchResults)}); //new XmlMessageFormatter(new String(){"System.String, mscorlib"});
                  cSearchRes = (WebSearch.cSearchResults)msg.Body;
                  StoreUrlInSearchResults(cSearchRes);
            }
                  //Exception handling code
            finally
            {
                  msg.Dispose();
                  msg = null;
                  if ( this.gblRunStatus == true
                  {
                        gMQSearchResults.BeginReceive();
                  }
            }
       }

by Glav | with no comments
Quick Fix Notification on AsyncClientScriptConnector Control
Tuesday, January 10, 2006 11:32 AM

I have recently updated my site  (http://www.theglavs.com) with a new look as I mentioned here, but in doing so an old version of my AsyncClientScriptConnector control crept onto the site and has been there for the last couple of days. I have noticed a bunch of people downloading it, so if you have grabbed a copy of this in the last couple of days, please go grab the copy I have there now as its the "proper" version. The previous one used an older version of the ICallbackEventHandler interface.

Thanks to Andy Schwam for pointing this out to me and I apologise for any inconvenience or confusion it has caused.

You can go directly to the download page by visiting here (http://www.theglavs.com/Downloads.aspx) and selecting the ".Net V2.0" side navigation link to locate the control - or - You can just download the control direct from here (http://www.theglavs.com/DownloadItem.aspx?FileID=25)

For those unaware, it is a control that makes the use of the Asynchronous Client Scripting feature in ASP.NET V2 a little easier by taking away the need to write any server code to produce and hook up the required Javascript. In addition, there is a property to allow a timer setting to allow timed, recurring calls asynchronously to your defined server side code, again without needing to write any Javascript.

by Glav | with no comments
New Web Site, Personal Web Site Starter Kit, MVP Award
Thursday, January 5, 2006 7:47 PM

I had a few days of easy going in between chapters so I thought I'd catch up on some things I had been putting off. I had upgraded a majority of my old site to V2.0 a little while ago but had yet to put the final touches on. You can see it at http://www.theglavs.com . Its based on the Personal Web Site Starter kit (http://msdn.microsoft.com/vstudio/express/vwd/starterkit/default.aspx) that is freely available. You simply install it, and have these ultra functional web site templates ready to customise. I'll be posting a full review, with some pain points in an upcoming ASP.NET Podcast  (http://www.aspnetpodcast.com) soon so look out for it.

Its basically a customised version, with all the old content migrated over to this new slicker looking site. It is ripe for a lot of extra functionality to be added but I wanted to get this "core" site up first. It makes extensive use of the membership, roles, themes and masterpages features of ASP.NET V2 and a whole lot more. Generally I am pretty impressed with the starter kit. There are more available at the link above so check em out.

On a personal note, I was notified that I got re-awarded my MVP status in ASP.NET today which is pretty cool.

ASP.NET Podcast review
Wednesday, January 4, 2006 12:46 PM

Wally IM'ed me today and pointed me towards a review of the ASP.NET podcast that we work on which can be located here (http://www.dotnetworkaholic.com/Technical+Podcasts+Recommendations.aspx).

All in all pretty accurate I'd have to say. Makes me think we have to get a little lighter in some areas though as it can get kinda heavy.

Only Wally is mentioned in the review though, so I could take that as a) my prescence goes largely unnoticed or b) all bad things point to Wally.

I prefer (b).  :-)

 

More Posts

This Blog

Syndication