<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>SingleUserBlog</title>
        <link>http://www.kowitz.net/category/12.aspx</link>
        <description>SingleUserBlog</description>
        <language>en-AU</language>
        <copyright>Brendan Kowitz</copyright>
        <managingEditor>brendan@kowitz.net</managingEditor>
        <generator>Subtext Version 2.0.0.43</generator>
        <item>
            <title>Cleaning Up ASP.NET Sessions in Google</title>
            <link>http://kowitz.net/archive/2006/12/06/cleaning-up-asp.net-sessions-in-google.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;ASP.NET and Dirty Urls&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are two things that have been bothering me about pages that are getting indexed in Google from an ASP.NET application. The first is somehow there are ASP.NET Session Urls ending up in the Google index. This is bad because searchers that actually do click these links are likely to get a 500 error (internal server error) because they will be trying to access a page of an expired session. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kowitz.net/Attachment.ashx?id=WindowsLiveWriter%2fCleaningUpASP.NETSessionsinGoogle_6A92%2ferror_urls%5b10%5d.jpg" rel="lightbox"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="Indexed Session Urls in Google Sitemap tools" width="473" src="http://www.kowitz.net/Attachment.ashx?id=WindowsLiveWriter%2fCleaningUpASP.NETSessionsinGoogle_6A92%2ferror_urls_thumb%5b8%5d.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How is Google finding all these 'bad' urls?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well apparently there is no browser definition in ASP.NET 2.0 for the Googlebot's useragent string, so when the spider hits your ASP.NET page it's browser capabilities are not defined.&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;Edit:&lt;/font&gt; The default browser capabilities are defined to &lt;strong&gt;&lt;font color="#000000"&gt;use cookies&lt;/font&gt;&lt;/strong&gt;, the issue occurs because the base Mozilla definition is defined to &lt;strong&gt;NOT&lt;/strong&gt; use cookies. If the browser is not able to accept cookeis .NET gets around this by inserting the session information into the Url and issues a 302 (content temporarily moved) in the response header. &lt;/p&gt;
&lt;p&gt;This default behaviour is a good and a bad thing. It's good in the fact that if I'm browsing an asp.net site on a pda that doesn't support cookies I still can. However just about every search engine spider ever created has it's own UserAgent string making it a tough task to issue the standard non-crufted url. One solution to fixing the session urls being indexed in Google is to tell your asp.net application that Googlebot supports cookies and the problem is solved. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To read more about the solution please see my &lt;a href="http://www.kowitz.net/2006/12/11/ASPNET+20+Mozilla+Browser+Detection+Hole.aspx"&gt;next post&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Captcha build-up&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Another dynamic aspect that is used on this site are Captcha images, and yes Google's image spider finds those too. Upon trying a Google image search on my domain, it's littered with Captcha images! I've also added an exclude to the robots.txt file for this.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kowitz.net/Attachment.ashx?id=WindowsLiveWriter%2fCleaningUpASP.NETSessionsinGoogle_6A92%2fcaptcha_buildup%5b2%5d.jpg" rel="lightbox"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="305" alt="Captcha image build-up in Google image search" width="331" src="http://www.kowitz.net/Attachment.ashx?id=WindowsLiveWriter%2fCleaningUpASP.NETSessionsinGoogle_6A92%2fcaptcha_buildup_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution for Captcha images build-up and stop-gap solution for Session Urls&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here is my "robots.txt" file so far for my SingleUserBlog install. *Note the last two lines, "Disallow: /(A(*" should exclude any ASP.NET session urls, (this is not recommended unless you have fixed the Mozilla detection hole). The last line should exclude any captcha images from being indexed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;User-agent: *&lt;br /&gt;
Disallow: /LoginPage.aspx&lt;br /&gt;
Disallow: /Administration/&lt;br /&gt;
Disallow: /(A(*&lt;br /&gt;
Disallow: /Captcha.ashx*$&lt;/p&gt;
&lt;/blockquote&gt;&lt;img src="http://kowitz.net/aggbug/63.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brendan Kowitz</dc:creator>
            <guid>http://kowitz.net/archive/2006/12/06/cleaning-up-asp.net-sessions-in-google.aspx</guid>
            <pubDate>Wed, 06 Dec 2006 13:49:27 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/63.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/12/06/cleaning-up-asp.net-sessions-in-google.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/63.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/63.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET Mobile Content</title>
            <link>http://kowitz.net/archive/2006/10/27/asp.net-mobile-content.aspx</link>
            <description>
		&lt;p&gt;A few weeks ago before everything started getting really busy both personally and work wise, I still somehow found the time to put together a mobile version of my blog content.  &lt;/p&gt;
		&lt;p&gt;
				&lt;strong&gt;Device Detection&lt;br /&gt;&lt;/strong&gt;In the beginning I was just using the ASP.NET property &lt;a href="http://forums.asp.net/thread/1392672.aspx"&gt;Request.Browser.IsMobileDevice &lt;/a&gt;for device detection, but for some reason WindowsCE is not considered a mobile device by this property, so I included an additional 'if Request.Browser.Platform.Equals("WinCE")'.  The mobile devices request will be redirected to &lt;a href="/mobile/"&gt;www.kowitz.net/mobile/&lt;/a&gt; which displays only one post on the screen at a time using 100% mobile controls and pages.&lt;/p&gt;
		&lt;p&gt;While I was creating my Mobile Page, I found in the docs that in ASP.NET 1.1 the adaptive rendering for mobile devices was only done in the ASP.NET mobile controls. Apparently this has all been combined into the regular controls in .NET 2.0.  My first thought was 'wow, thats great, my pages should be compatible with mobile devices without having to do a thing'.  However after viewing my normal domain with an &lt;a href="http://www.gsmarena.com/o2_xda_neo-1522.php"&gt;O2 Neo WindowsCE device &lt;/a&gt;there's just waaay to much content for the small screen.&lt;/p&gt;
		&lt;p&gt;This leads me to three possible solutions to dealing with mobile devices reading my blog.  &lt;/p&gt;
		&lt;ol&gt;
				&lt;li&gt;The first is simply; get an rss reader for your mobile device, you get none of the pretty style sheet nonsense since it probably won't display correctly anyway. 
&lt;/li&gt;
				&lt;li&gt;Second is redirect the device to a different url which is specific to mobile screens. 
&lt;/li&gt;
				&lt;li&gt;The third option is the one I'd like to explore a little more which is; assuming that the regular controls will use their super adaptive rendering powers on mobile screens, then simply change the masterpage to a 'mobile specific' version. &lt;/li&gt;
		&lt;/ol&gt;
		&lt;p&gt;
				&lt;strong&gt;Issues:&lt;br /&gt;&lt;/strong&gt;I would like to test the normal controls using a WAP only phone / browser just to make sure everything works the way it should before I fully move away from my 'Mobile Only' page for a masterpage.&lt;/p&gt;
		&lt;p&gt;
				&lt;strong&gt;Observations:&lt;/strong&gt;
				&lt;br /&gt;Because my posts contain HTML formatting, this formatting may or may not be compatible on the target mobile device.  The MobileLiteral control takes care of this by filtering out incompatible HTML tags, now to be specific, its easier to list the tags that it &lt;u&gt;doesn't&lt;/u&gt; filter, even &amp;lt;hr&amp;gt; is gone.  This is not so much as a problem as the &amp;lt;img&amp;gt; tag being filtered out of the posts.  My original idea for this problem was to simply regex the post to extract the image links, then redirect all my images through my own 'ImageResizingHandler' which would then shrink the image on-the-fly to fit the width of the mobile screen if it was too big...but...because these tags a wiped out, this won't work...yet.&lt;/p&gt;
		&lt;p&gt;
				&lt;strong&gt;Future:&lt;/strong&gt;
				&lt;br /&gt;Well, my next steps are to test the rendering under a more primitive device then my O2 Neo.  Somehow improve the mobile devices detection (even &lt;a href="http://www.opera.com/products/mobile/"&gt;Opera Mobile &lt;/a&gt;slips through). Then assuming all that works I've only got the images problem to figure out.&lt;/p&gt;
&lt;img src="http://kowitz.net/aggbug/60.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2006/10/27/asp.net-mobile-content.aspx</guid>
            <pubDate>Thu, 26 Oct 2006 20:31:57 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/60.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/10/27/asp.net-mobile-content.aspx#feedback</comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/60.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/60.aspx</trackback:ping>
        </item>
        <item>
            <title>Url Rewriting using IHttpModule vs ISAPI Rewrite</title>
            <link>http://kowitz.net/archive/2006/09/15/url-rewriting-using-ihttpmodule-vs-isapi-rewrite.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Why not use IHttpHandler for rewriting:&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;You can find the previous post I've done on this subject &lt;a href="/2006/3/8/IHTTPModule+vs+IHTTPHandler+.aspx"&gt;here&lt;/a&gt;, it has a &lt;strong&gt;c# source code example &lt;/strong&gt;and will also explain some of the downfalls of using the IhttpHandler for rewriting.  In summary my basic feeling on this is IhttpHandler is great if you know the Url that is going to be requested eg. /Rss.ashx every time an rss reader requests this Url, the reader will never know that Rss.ashx doesn't necessarily have to exist as the response is picked up and written back by the handler.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;How is IHttpModule more useful url rewriting?&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;When it comes down to rewriting urls where the requested Url is not known or is dynamically generated IHttpModule makes it easier to manipulate the request as it passes down the asp.net stack.  So creating an ASP.NET url rewriter it's just a simple matter of attaching a httpmodule that can identify the dynamic url and rewrite it before it requests a page that doesn't exist (eg a 404).&lt;/p&gt; &lt;p&gt;The way I chose to do this in pure asp.net was to use regex matching.  Every request that comes in is tried against a regex pattern, if the url makes a match it is rewritten to the handling page (or possibly a IHttpHandler) to return the response.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;But nothing beats ISAPI rewrite, right?&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;I'd say yes and no to this, ISAPI rewrite uses 'almost' the same principle as my module, except it rewrites the Url as it enters IIS and before the request even gets to the ASP.NET request handler.  This means the client will think they are at a particular url eg /rss/ but the request could be transformed by ISAPI rewrite to /feeds/rss.ashx.  One thing ISAPI rewrite can do that the .NET module can not is it is able to hide the page's language extension (eg. .aspx), but doing this is not a huge benefit unless you want to change your site's programming language which would most likely break all your referring links if the extension is present.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The ASP.NET way:&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;So now for the things that the ASP.NET way does better. Because the rewriting is done at the ASP.NET level, .NET knows about it, this means ASP.NET can auto-magically resolve all those virtual ~/paths correctly.  There are also some other SEO advantages to doing this such as utilizing the keywords in your url as opposed to having a meaningless url full of query parameters which will get you nothing, well it might get some SEO points, but not as much as you could.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The ideal solution for ASP.NET:&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;I think the ideal way to do rewriting for ASP.NET is use both ISAPI in combination with a .NET module for the reasons listed above.  ISAPI rewrite gives that edge of power over IIS that a class inside ASP.NET can't, so urls can look like directories ('/') rather then .aspx pages, plus the ISAPI rewrite configuration file is very convenient and configurable.  The .NET module comes in handy to rewrite the url from a dynamic location to the real location of the page and is able to resolve all the ~/ virtual directories in the process.&lt;/p&gt; &lt;p&gt;An example of this that I've done using a combination on another site is as follows:&lt;/p&gt; &lt;p&gt;Request comes to: &lt;font color="#0000ff"&gt;http://www.site.com/second-level/content-title/&lt;br /&gt;&lt;/font&gt;ISAPI rewrites to: &lt;font color="#0000ff"&gt;http://www.site.com/second-level/content-title/ResolvePage.aspx&lt;br /&gt;&lt;/font&gt;My .NET module watches for requests to ResolvePage.aspx and does an ASP.NET Context.RewritePath() to the real content page location of &lt;font color="#0000ff"&gt;http://www.site.com/Content.aspx?path=content-title&lt;/font&gt;&lt;br /&gt;This then causes Content.aspx to render 'as if' it was at the requested location eg.&lt;br /&gt;&lt;font color="#0000ff"&gt;http://www.site.com/second-level/content-title/ResolvePage.aspx&lt;/font&gt; so all the virtual paths are correct in the requesting browser. &lt;/p&gt; &lt;p&gt;And there it is a friendly, programming language free, keyword rich url living in harmony with ISAPI and ASP.NET. Search engines are happy, users have nice clean hackable urls to look at and remember and are happy.  Everybody is just happy.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Edited using Windows Live Writer, thanks &lt;a href="http://sticklebackplastic.com/" target="_blank"&gt;Matt&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://kowitz.net/aggbug/58.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2006/09/15/url-rewriting-using-ihttpmodule-vs-isapi-rewrite.aspx</guid>
            <pubDate>Thu, 14 Sep 2006 21:25:01 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/58.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/09/15/url-rewriting-using-ihttpmodule-vs-isapi-rewrite.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/58.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/58.aspx</trackback:ping>
        </item>
        <item>
            <title>Powered By SUB</title>
            <link>http://kowitz.net/archive/2006/09/06/powered-by-sub.aspx</link>
            <description>
		&lt;p&gt;I have been aching to try out Live Writer to do a post...but no success yet :(&lt;/p&gt;
		&lt;p&gt;Many people have probably seen the "Powered By ASP.NET 2.0" button.&lt;/p&gt;
		&lt;p&gt;
				&lt;img src="http://kowitz.net/Data/Images/pow_by_aspnet2.0a.gif" /&gt; &lt;/p&gt;
		&lt;p&gt;So I thought it was only fair to convert it into a Powered by SUB button.&lt;/p&gt;
		&lt;p&gt;
				&lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=SUB" target="_new" atomicselection="true"&gt;
						&lt;img alt="Powered By Single User Blog" src="http://kowitz.net/Data/Images/powered_by_sub_blue.gif" border="0" /&gt;
				&lt;/a&gt; &lt;/p&gt;
		&lt;p&gt;Or here's another more subtle one.&lt;/p&gt;
		&lt;p&gt;
				&lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=SUB" target="_new" atomicselection="true"&gt;
						&lt;img alt="Powered By Single User Blog" src="http://kowitz.net/Data/Images/powered_by_sub_green.gif" border="0" /&gt; &lt;/a&gt;
		&lt;/p&gt;
&lt;img src="http://kowitz.net/aggbug/57.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2006/09/06/powered-by-sub.aspx</guid>
            <pubDate>Wed, 06 Sep 2006 02:55:29 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/57.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/09/06/powered-by-sub.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/57.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/57.aspx</trackback:ping>
        </item>
        <item>
            <title>Online Presence Webpart</title>
            <link>http://kowitz.net/archive/2006/05/27/online-presence-webpart.aspx</link>
            <description>
		&lt;p&gt;
        You may have noticed that over the past few weeks I have been trying to build more
        interactive elements into this blog, some of these include.&lt;/p&gt;
		&lt;ul&gt;
				&lt;li&gt;Most viewed posts webpart.&lt;/li&gt;
				&lt;li&gt;Rate a post.&lt;/li&gt;
				&lt;li&gt;Highest Rated posts webpart.&lt;/li&gt;
				&lt;li&gt;Concurrent user indicator.&lt;/li&gt;
				&lt;li&gt;MSN client, online / offline status.&lt;/li&gt;
				&lt;li&gt;Sessions per hour graph. &lt;/li&gt;
		&lt;/ul&gt;
		&lt;p&gt;
        My intention was that this blog would start to expose more of the interesting content
        and create a slight online presence awareness by subtly reacting to how it is interacted
        with.&lt;/p&gt;
		&lt;p&gt;
        Most of the features I just listed are part of a Sqlite stats database that I’ve
        been logging certain sessions/hits/ratings to. I hope to make this available in
        the near future with a slightly improved version of the Sqlite datalayer.&lt;/p&gt;
		&lt;p&gt;
        But for now here is how to install the code I am using to control the MSN client
        and a preview of the Concurrent user indicator.&lt;/p&gt;
		&lt;p&gt;
				&lt;strong&gt;
            How to install this webpart.&lt;/strong&gt;
		&lt;/p&gt;
		&lt;p&gt;
				&lt;strong&gt;Step 1:&lt;/strong&gt; Create yourself a new ‘bot’ msn account that your website
        will use, than add yourself to the bot’s contact list.&lt;/p&gt;
		&lt;p&gt;
				&lt;strong&gt;Step 2:&lt;/strong&gt; Add these 2 events to your Global.asax file&lt;/p&gt;
		&lt;font color="#0000ff"&gt;protected&lt;/font&gt;
		&lt;font color="#0000ff"&gt;void&lt;/font&gt; Session_OnStart()&lt;br /&gt;
    {
    &lt;br /&gt;
    kowitz.SingleUserBlog.Services.&lt;font color="#008080"&gt;OnlineUsers&lt;/font&gt; RecordUser(Session.SessionID);&lt;br /&gt;
    kowitz.WebsiteMSN.&lt;font color="#008080"&gt;MSNInstance&lt;/font&gt;.SignOn();&lt;br /&gt;
    }
    &lt;p&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt; Session_OnEnd()&lt;br /&gt;
    {&lt;br /&gt;
    kowitz.SingleUserBlog.Services. &lt;font color="#008080"&gt;OnlineUsers&lt;/font&gt;.DeleteUser(Session.SessionID);&lt;br /&gt;&lt;font color="#0000ff"&gt;   if&lt;/font&gt; (kowitz.SingleUserBlog.Services.&lt;font color="#008080"&gt;SqliteBlogStatRecorder&lt;/font&gt;.ConcurrentUsers() &amp;lt;= 0)&lt;br /&gt;
      {&lt;br /&gt;
        kowitz.WebsiteMSN.&lt;font color="#008080"&gt;MSNInstance&lt;/font&gt; SignOff();&lt;br /&gt;
      }
    &lt;br /&gt;
    }&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt;  Copy the webpart control into the Webparts folder.
        Copy the images into your images directory and copy the two dlls (kowitz.WebsiteMSN.dll
        and XihSolutions.DotMSN.dll) into your Bin directory.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Add the webpart to your Masterpage’s catalogue zone.&lt;/p&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;uc1&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#800000"&gt;MessengerOnlinePresence&lt;/font&gt;&lt;font color="#ff0000"&gt;ID&lt;/font&gt;&lt;font color="#0000ff"&gt;="MessengerOnlinePresence1"&lt;/font&gt;&lt;font color="#ff0000"&gt;Title&lt;/font&gt;&lt;font color="#0000ff"&gt;="Messenger Online Presence"&lt;/font&gt;&lt;font color="#ff0000"&gt;runat&lt;/font&gt;&lt;font color="#0000ff"&gt;="server"/&amp;gt;&lt;/font&gt;&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Add this to your BlogConfiguration.xml file:&lt;/p&gt;&lt;font color="#0000ff"&gt;
        &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;MyMSNAccount&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;
    MyMSNAccount@hotmail.com &lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;MyMSNAccount&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br /&gt;
        &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;BotMSNAccount&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;
    msnbot@mywebsite.net&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;BotMSNAccount&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br /&gt;
        &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;BotMSNPassword&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;mybotspassword&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;BotMSNPassword&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;p&gt;&lt;strong&gt;Step 6,&lt;/strong&gt; Allowing your bot to message you when someone leaves feedback:
                    Add this line to the
                
    &lt;font color="#0000ff"&gt;void &lt;/font&gt;CommentForm1_CommentAdded() function
        (just after the call to "&lt;font color="#008080"&gt;Notifications&lt;/font&gt;.NotifyAdministrator(subject,
    body);") in your Posts.aspx page.&lt;br /&gt;
    kowitz.WebsiteMSN.&lt;font color="#008080"&gt;MSNInstance&lt;/font&gt;.SendMeAMessage(body);&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Finally&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;
        Your blog should now be logging onto MSN when there is at least 1 active session
        on your site.&lt;/p&gt;&lt;p&gt;
        As I mentioned before, a lot more of the things I’ve added are part of the Sqlite
        stats db / blog datalayer I’ve been making and hopefully I’ll also be releasing
        this soon.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="/files/BlogWebsiteMSN.zip"&gt;MessengerOnlinePresence webpart&lt;/a&gt;&lt;/p&gt;&lt;img src="http://kowitz.net/aggbug/47.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2006/05/27/online-presence-webpart.aspx</guid>
            <pubDate>Fri, 26 May 2006 21:30:10 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/47.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/05/27/online-presence-webpart.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/47.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/47.aspx</trackback:ping>
        </item>
        <item>
            <title>Your Blog has signed-in</title>
            <link>http://kowitz.net/archive/2006/05/21/your-blog-has-signed-in.aspx</link>
            <description>
		&lt;p&gt;
				&lt;img alt="You blog has signed-in" hspace="0" src="http://kowitz.net/Data/Images/www_signin.jpg" align="right" border="0" /&gt;Today I was browsing the website &lt;a href="http://www.programmableweb.com/apilist"&gt;ProgrammableWeb&lt;/a&gt;, which lists the Web APIs by a lot of well known sites. One of the things that caught my eye was MSN, and then I noticed they had a listing for Messenger. After clicking details I soon found it was only a description of how Javascript can invoke a chat window from the installed messenger client. &lt;/p&gt;
		&lt;p&gt;I wanted to take this idea further and maybe integrate something Messengery into SUB. After a single search I come across &lt;a href="http://www.xihsolutions.net/dotmsn/"&gt;DotMSN&lt;/a&gt;, a C# library for Messenger. So&amp;amp; as an experiment I've integrated the library into SUB. When someone begins to browse my site (like you are now), the first person there invokes the blog to sign-in. After the blog has signed in, it then checks the accounts in its contact list to check if I'm online, so without doing anything, you know if I'm on the net, and I know somebody is on my blog. &lt;/p&gt;
		&lt;p&gt;So how can we communicate? Well for now I've added some functionality into the comments event, when you leave a comment, SUB will send it via Messenger to me as well as to my set up email account as normal. &lt;/p&gt;
		&lt;p&gt;I guess there are limitless things you could do with a blog that signs into msn but I think I'll leave it at that for now and see how it goes. What do you think? &lt;/p&gt;
		&lt;p&gt;
				&lt;img alt="Your blog has sent you an instant message" hspace="0" src="http://kowitz.net/Data/Images/comment_by_msn.jpg" border="0" /&gt;
		&lt;/p&gt;
&lt;img src="http://kowitz.net/aggbug/46.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2006/05/21/your-blog-has-signed-in.aspx</guid>
            <pubDate>Sat, 20 May 2006 23:20:48 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/46.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/05/21/your-blog-has-signed-in.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/46.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/46.aspx</trackback:ping>
        </item>
        <item>
            <title>New webparts, SUB Monthly Archive List</title>
            <link>http://kowitz.net/archive/2006/05/08/new-webparts-sub-monthly-archive-list.aspx</link>
            <description>		&lt;p&gt;I've had a couple of experimental things going on here in this blog. Firstly is the &lt;a href="/Posts/PostArchives.aspx"&gt;Archive&lt;/a&gt; page, it now renders the archive list in a similar fashion to a &lt;a href="http://www.lattimore.id.au/2006/04/27/wordpress-plugin-hicksdesign-style-archives/"&gt;plug-in &lt;/a&gt;Al has created for wordpress.  As for the whole query problem with the wordpress version, the SUB version of this does exactly 1 query for each month listed or 0 queries if that month has already been cached.&lt;/p&gt;
		&lt;p&gt;The other experimental webpart I've been running is the "Popular Posts" component (displayed on the left).  Everytime a post is hit it increments the daily count, then it selects the top x number of posts over the last 21 days.  This is also similar to a wordpress plug-in Al has running on his site.  This webpart I'll probably be making more modifications to until I'm happy with the way it's behaving, so if your interested in it, stay tuned.&lt;/p&gt;
		&lt;p&gt;
				&lt;strong&gt;Files&lt;/strong&gt;
				&lt;br /&gt;Archive webpart: &lt;a href="/Files/DetailedMonthlyPostListing.zip"&gt;DetailedMonthlyPostListing.zip&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://kowitz.net/aggbug/43.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2006/05/08/new-webparts-sub-monthly-archive-list.aspx</guid>
            <pubDate>Mon, 08 May 2006 11:41:05 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/43.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/05/08/new-webparts-sub-monthly-archive-list.aspx#feedback</comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/43.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/43.aspx</trackback:ping>
        </item>
        <item>
            <title>New SUB Theme</title>
            <link>http://kowitz.net/archive/2006/05/04/new-sub-theme.aspx</link>
            <description>Just for something random I decided to re-arrange the objects in the banner and adjust the link font sizes.&lt;img src="http://kowitz.net/aggbug/42.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2006/05/04/new-sub-theme.aspx</guid>
            <pubDate>Thu, 04 May 2006 11:08:29 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/42.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/05/04/new-sub-theme.aspx#feedback</comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/42.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/42.aspx</trackback:ping>
        </item>
        <item>
            <title>Webparts without SqlExpress or SqlServer</title>
            <link>http://kowitz.net/archive/2006/05/01/webparts-without-sqlexpress-or-sqlserver.aspx</link>
            <description>		&lt;p&gt;One of the things that has been annoying me for some time about Webparts is that silly dependency on SqlExpress/SqlServer. My webhosting at Jumba comes with MySQL or something and not SqlServer. So up until this point to get around the dependency on SqlServer I simply disabled all the calls from SqlBlogPersonalizationProvider and that did the trick, but I had to manually do all the layout stuff and couldn’t use the webparts properly. A while ago when Microsoft released the source code for the old &lt;a href="http://msdn.microsoft.com/asp.net/downloads/providers/default.aspx"&gt;AccessPersonalizationProvider from Beta 1&lt;/a&gt; I thought I’d come back and address this issue. &lt;/p&gt;
		&lt;p&gt;Here’s what happened. &lt;br /&gt;I plugged the Access providers into SUB, it all compiled started to run, then Bang! It all broke. Apparently I need an existing Access database with the correct schema and tables. I’m sure this wouldn’t have been very difficult to put together but I don’t have that much time anymore. &lt;/p&gt;
		&lt;p&gt;Fortunately I found this &lt;a href="http://weblogs.asp.net/dr.netjes/archive/2005/03/10/391621.aspx"&gt;blog entry where Dion &lt;/a&gt;provides details on how to store the serialized byte array that the provider outputs as a Base64 string in the aspx page. I didn’t exactly want the page modifying itself so I simply modified it to store all the goodies in an Xml document in the App_Data folder. &lt;/p&gt;
		&lt;p&gt;Yey, so now I can use the Shared-Scope webpart features without SqlServer. Another advantage of this is my Xml document is around 5kb where I know the starting size for that SqlExpress db is 10mb. In future I would like to get a portable database solution working such as the Access one or even a Sqlite version.&lt;/p&gt;
		&lt;p&gt;
				&lt;a href="/files/source/XmlFilePersonalizationProvider.cs.txt"&gt;View XmlFilePersonalizationProvider Source&lt;/a&gt;
		&lt;/p&gt;
&lt;img src="http://kowitz.net/aggbug/41.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2006/05/01/webparts-without-sqlexpress-or-sqlserver.aspx</guid>
            <pubDate>Mon, 01 May 2006 11:34:13 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/41.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/05/01/webparts-without-sqlexpress-or-sqlserver.aspx#feedback</comments>
            <slash:comments>19</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/41.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/41.aspx</trackback:ping>
        </item>
        <item>
            <title>Update: Sqlite Dataprovider for SUBv2</title>
            <link>http://kowitz.net/archive/2006/03/10/update-sqlite-dataprovider-for-subv2.aspx</link>
            <description>
		&lt;p&gt;Here is the new Sqlite Dataprovider for SingleUserBlog v2.0.1.  It is now supports string IDs so any existing SingleUserBlog can migrate easily.&lt;/p&gt;
		&lt;p&gt;Find out more information at its new home &lt;a href="http://www.kowitz.net/SUB_Sqlite.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;
		&lt;p&gt;Please feel free to leave any comments, feedback or problems on this post.&lt;/p&gt;
&lt;img src="http://kowitz.net/aggbug/35.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2006/03/10/update-sqlite-dataprovider-for-subv2.aspx</guid>
            <pubDate>Fri, 10 Mar 2006 01:45:01 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/35.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/03/10/update-sqlite-dataprovider-for-subv2.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/35.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/35.aspx</trackback:ping>
        </item>
    </channel>
</rss>