<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Mithila Software Blog</title>
    <description />
    <link>http://www.mithilasoftware.com/Blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.0.0.36</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.mithilasoftware.com/Blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://feeds.feedburner.com/ MithilaSoftware</blogChannel:blink>
    <dc:creator>Mithila Software Team</dc:creator>
    <dc:title>Mithila Software Blog</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MithilaSoftware" /><feedburner:info uri="mithilasoftware" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>How to limit string by words in asp.net</title>
      <description>&lt;p&gt;Limiting words from an asp.net string is basically two step process.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; 1.Find the total number of words in the string.This is important in the sense that it helps us to compare with the number of words actually required by user.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; 2.Find the product string by splitting (as a string array) the input string and concatenate it again based on number of words required.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; CountWords(&lt;span class="kwrd"&gt;string&lt;/span&gt; s)
    {
        &lt;span class="kwrd"&gt;int&lt;/span&gt; c = 0;
        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 1; i &amp;lt; s.Length; i++)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;char&lt;/span&gt;.IsWhiteSpace(s[i - 1]) == &lt;span class="kwrd"&gt;true&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;char&lt;/span&gt;.IsLetterOrDigit(s[i]) == &lt;span class="kwrd"&gt;true&lt;/span&gt; ||
                    &lt;span class="kwrd"&gt;char&lt;/span&gt;.IsPunctuation(s[i]))
                {
                    c++;
                }
            }
        }
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (s.Length &amp;gt; 2)
        {
            c++;
        }
        &lt;span class="kwrd"&gt;return&lt;/span&gt; c;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LimitWords(&lt;span class="kwrd"&gt;string&lt;/span&gt; s,&lt;span class="kwrd"&gt;int&lt;/span&gt; num)
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt; p = &lt;span class="str"&gt;""&lt;/span&gt;;
        &lt;span class="kwrd"&gt;int&lt;/span&gt; count = CountWords(s);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (num &amp;gt; count)
            &lt;span class="kwrd"&gt;return&lt;/span&gt; s;

        &lt;span class="kwrd"&gt;string&lt;/span&gt;[] words = s.Split();

        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; num; i++)
        {

            p += words[i]+&lt;span class="str"&gt;" "&lt;/span&gt;;
            
        }

        &lt;span class="kwrd"&gt;return&lt;/span&gt; p;
    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;h2&gt;How to use the above code ?&lt;/h2&gt;
&lt;p&gt;So , suppose we have a sample string -&lt;/p&gt;
&lt;p&gt;string s = "A quick brown fox jumps over the lazy dog" ;&lt;/p&gt;
&lt;p&gt;And we now need to limit it to 5 words we can make it happen this way -&lt;/p&gt;
&lt;p&gt;string result =&amp;nbsp; LimitWords(&lt;span class="kwrd"&gt;s&lt;/span&gt;,&lt;span class="kwrd"&gt;5&lt;/span&gt;) ;&lt;/p&gt;
&lt;p&gt;This will give us an output of "A quick brown fox jumps" , a 5 word string in result variable.&lt;/p&gt;</description>
      <link>http://feedproxy.google.com/~r/MithilaSoftware/~3/4Fbq0D4R8sE/post.aspx</link>
      <comments>http://www.mithilasoftware.com/Blog/post/2011/12/27/How-to-limit-string-by-words-in-aspnet.aspx#comment</comments>
      <guid isPermaLink="false">http://www.mithilasoftware.com/Blog/post.aspx?id=db3ef237-d7bd-42a4-96ff-c1c178cca7e6</guid>
      <pubDate>Tue, 27 Dec 2011 02:22:00 -0500</pubDate>
      <category>Asp.Net</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.mithilasoftware.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.mithilasoftware.com/Blog/post.aspx?id=db3ef237-d7bd-42a4-96ff-c1c178cca7e6</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.mithilasoftware.com/Blog/trackback.axd?id=db3ef237-d7bd-42a4-96ff-c1c178cca7e6</trackback:ping>
      <wfw:comment>http://www.mithilasoftware.com/Blog/post/2011/12/27/How-to-limit-string-by-words-in-aspnet.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.mithilasoftware.com/Blog/syndication.axd?post=db3ef237-d7bd-42a4-96ff-c1c178cca7e6</wfw:commentRss>
    <feedburner:origLink>http://www.mithilasoftware.com/Blog/post.aspx?id=db3ef237-d7bd-42a4-96ff-c1c178cca7e6</feedburner:origLink></item>
    <item>
      <title>Our first BlogEngine.Net Theme !  - Sizzle </title>
      <description>&lt;p&gt;&lt;img src="http://www.mithilasoftware.com/Blog/image.axd?picture=2011%2f11%2fsizzletheme.jpg" alt="" width="640" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We are excited to release our first theme for BlogEngine.Net named Sizzle (&lt;a href="http://dnbegallery.org/cms/List/Themes/Sizzle"&gt;&lt;strong&gt;download sizzle theme&lt;/strong&gt;&lt;/a&gt;) .The idea was born trying to incorporate a fresh and cool look to&amp;nbsp; BE.net powered blogs.With that start ! , we would be enhancing and adding new features (like widgets and extensions) to this theme.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;On the widget front , we have released &lt;a href="http://dnbegallery.org/cms/List/Widgets/FeaturedPostsList"&gt;&lt;strong&gt;Featured Post List Widget&lt;/strong&gt;&lt;/a&gt; which can be used to display particular category posts in a slider fashion for example Featured Articles / Category.We would love to hear your feedbacks which can help us in bug fixing as well as motivation .&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Stay tuned !&lt;/p&gt;</description>
      <link>http://feedproxy.google.com/~r/MithilaSoftware/~3/HhbeTob3qfU/post.aspx</link>
      <comments>http://www.mithilasoftware.com/Blog/post/2011/11/15/We-have-released-our-first-BlogEngineNet-Theme-Sizzle-!.aspx#comment</comments>
      <guid isPermaLink="false">http://www.mithilasoftware.com/Blog/post.aspx?id=1a59204b-542d-4e84-900c-39062e3b7870</guid>
      <pubDate>Tue, 15 Nov 2011 08:59:00 -0500</pubDate>
      <category>BlogEngine.NET</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.mithilasoftware.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.mithilasoftware.com/Blog/post.aspx?id=1a59204b-542d-4e84-900c-39062e3b7870</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.mithilasoftware.com/Blog/trackback.axd?id=1a59204b-542d-4e84-900c-39062e3b7870</trackback:ping>
      <wfw:comment>http://www.mithilasoftware.com/Blog/post/2011/11/15/We-have-released-our-first-BlogEngineNet-Theme-Sizzle-!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.mithilasoftware.com/Blog/syndication.axd?post=1a59204b-542d-4e84-900c-39062e3b7870</wfw:commentRss>
    <feedburner:origLink>http://www.mithilasoftware.com/Blog/post.aspx?id=1a59204b-542d-4e84-900c-39062e3b7870</feedburner:origLink></item>
    <item>
      <title>Domain Age Search Utility</title>
      <description>&lt;p&gt;You can check the domain age of any site with this utility.In the tools section you can check the utility.Find it &lt;a href="http://www.mithilasoftware.com/tools/domain-age-check.aspx"&gt;here&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://feedproxy.google.com/~r/MithilaSoftware/~3/LcQuqtf1oW0/post.aspx</link>
      <comments>http://www.mithilasoftware.com/Blog/post/2011/09/14/Domain-Age-Search-Utility.aspx#comment</comments>
      <guid isPermaLink="false">http://www.mithilasoftware.com/Blog/post.aspx?id=66190b62-00a6-4a6b-b538-fbf1a6eb60c5</guid>
      <pubDate>Wed, 14 Sep 2011 04:47:00 -0500</pubDate>
      <category>Search Engine Optimization</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.mithilasoftware.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.mithilasoftware.com/Blog/post.aspx?id=66190b62-00a6-4a6b-b538-fbf1a6eb60c5</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.mithilasoftware.com/Blog/trackback.axd?id=66190b62-00a6-4a6b-b538-fbf1a6eb60c5</trackback:ping>
      <wfw:comment>http://www.mithilasoftware.com/Blog/post/2011/09/14/Domain-Age-Search-Utility.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.mithilasoftware.com/Blog/syndication.axd?post=66190b62-00a6-4a6b-b538-fbf1a6eb60c5</wfw:commentRss>
    <feedburner:origLink>http://www.mithilasoftware.com/Blog/post.aspx?id=66190b62-00a6-4a6b-b538-fbf1a6eb60c5</feedburner:origLink></item>
    <item>
      <title>Fixing BlogEngine.Net For SEO Requirements</title>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After the Panda updates the onsite seo has taken a front seat.The html suggestions that you see in your Google Webmaster Tools must be taken care of.&lt;br /&gt;&lt;br /&gt;Talking about a blog engine.net based site we have some conditions that needs to be fixed &lt;br /&gt;&lt;br /&gt;1.Remove unnecessary tagged pages from google index.&lt;br /&gt;2.301 Redirect duplicate pages occured due to Case problem of IIS (Ex Mobile-Review.aspx &amp;amp; mobile-review.aspx)&lt;br /&gt;3.Remove paged urls from index except the main category url.&lt;br /&gt;4.Remove duplicate post url from index bearing date in url (eg - yyyy/mm/dd)&lt;br /&gt;5.Adding Canonical tag to duplicate post pages.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Google webmaster suggests these sample urls have problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;/?tag=/32-mega-pixel-ericsson-phones &lt;br /&gt;http://www.xx.com/post/2009/10/28/Dodge-Ram-1500-mpv-review.aspx&lt;br /&gt;&lt;br /&gt;/category/aa-Review.aspx&lt;br /&gt;/category/AA-review.aspx&lt;br /&gt;&lt;br /&gt;/category/aa-Review.aspx?page=5&lt;br /&gt;/category/AA-review.aspx?page=5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;And this one is the fix that you can extend&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using BlogEngine.Core;
using BlogEngine.Core.Web.Controls;
using System.Text.RegularExpressions;

public partial class site : System.Web.UI.MasterPage
{
  protected void Page_Load(object sender, EventArgs e)
  {
		if (Page.User.Identity.IsAuthenticated)
		{
			aLogin.InnerText = Resources.labels.logoff;
			aLogin.HRef = BlogEngine.Core.Utils.RelativeWebRoot + "login.aspx?logoff";
		}
		else
		{
			aLogin.HRef = BlogEngine.Core.Utils.RelativeWebRoot + "login.aspx";
			aLogin.InnerText = Resources.labels.login;
		}

        if (Request.QueryString.Count == 0 &amp;amp;&amp;amp; Request.RawUrl.Replace("?","").EndsWith("/default.aspx",StringComparison.OrdinalIgnoreCase))
        {
            string query = Request.QueryString["theme"];
            string theme = !string.IsNullOrEmpty(query) ? query : BlogSettings.Instance.Theme;
            string path = string.Concat(Utils.RelativeWebRoot, "themes/", theme, "/PostViewFrontPage.ascx");
            //Control.MapPath() 

            PostViewBase postView = (BlogEngine.Core.Web.Controls.PostViewBase)LoadControl(path);
            postView.ShowExcerpt = true;// BlogSettings.Instance.ShowDescriptionInPostList;
            //just set a temp post to show - for not getting error
            Post tmp = BlogEngine.Core.Post.Posts[0];
            postView.Post = tmp;
            postView.ID = "sdfsdfsf";// tmp.Id.ToString().Replace("-", string.Empty);
            postView.Location = ServingLocation.PostList;

            fronttop.Controls.Add(postView);
        }
		
		
		 string rawUrl = String.Concat(this.GetApplicationUrl(), Request.RawUrl);
        if (rawUrl.Contains("/post/"))
        {
            bool hasQueryStrings = Request.QueryString.Keys.Count &amp;gt; 1;

            if (hasQueryStrings)
            {
                Uri uri = new Uri(rawUrl);
                rawUrl = uri.GetLeftPart(UriPartial.Path);

                HtmlLink canonical = new HtmlLink();
                canonical.Href = rawUrl;
                canonical.Attributes["rel"] = "canonical";
                Page.Header.Controls.Add(canonical);
            }

            Regex regex = new Regex(@"^http(s)?://([\w-]+\.)+[/[\w- ./]+[/[\w- ./]+[\-\/\s]\d{4}[\-\/\s]?((((0[13578])|(1[02]))[\-\/\s]?(([0-2][0-9])|(3[01])))|(((0[469])|(11))[\-\/\s]?(([0-2][0-9])|(30)))|(02[\-\/\s]?[0-2][0-9]))+(/[\w- ./?%&amp;amp;=]*)?$");
            bool hasDateUrl = regex.IsMatch(rawUrl);
            if (hasDateUrl)
            {
                HtmlGenericControl meta = new HtmlGenericControl("meta");
                meta.Attributes["name"] = "robots";
                meta.Attributes["content"] = "noindex,follow";
                Page.Header.Controls.Add(meta);
            
            }

        }


        if (rawUrl.Contains("?tag="))
        {         
                HtmlGenericControl meta = new HtmlGenericControl("meta");
                meta.Attributes["name"] = "robots";
                meta.Attributes["content"] = "noindex,follow";
                Page.Header.Controls.Add(meta);
        }


        if (rawUrl.Contains("/category/"))
        {
            bool hasQueryStrings = Request.QueryString.Keys.Count &amp;gt; 1;

            if (hasQueryStrings)
            {

                HtmlGenericControl meta = new HtmlGenericControl("meta");
                meta.Attributes["name"] = "robots";
                meta.Attributes["content"] = "noindex,follow";
                Page.Header.Controls.Add(meta);

            }

            else
            {

                bool hasCapitalUrl = false;
                foreach (Char C in rawUrl)
                {
                    if (Char.IsUpper(C))
                        hasCapitalUrl = true;
                }

                if (hasCapitalUrl)
                {
                    Response.StatusCode = 301;
                    Response.Status = "301 Moved Permanently";
                    Response.AddHeader("Location", rawUrl.ToLower());
                
                }

            }

        }
		
  }
  
   private string GetApplicationUrl()
    {
        string basePath;
        string port = HttpContext.Current.Request.ServerVariables["SERVER_PORT"];
        string protocol = HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"];
        string serverName = HttpContext.Current.Request.ServerVariables["SERVER_NAME"];

        if (port == null || port == "80")
        {
            port = String.Empty;
        }
        else
        {
            port = String.Concat(":", port);
        }

        if (protocol == null || protocol == "0")
        {
            protocol = "http://";
        }
        else
        {
            protocol = "https://";
        }

        basePath = String.Concat(protocol, serverName, port);
        return basePath;
    }

}&lt;/pre&gt;</description>
      <link>http://feedproxy.google.com/~r/MithilaSoftware/~3/HjX6nk-wgN0/post.aspx</link>
      <comments>http://www.mithilasoftware.com/Blog/post/2011/09/06/Fixing-BlogEngineNet-For-SEO-Requirements.aspx#comment</comments>
      <guid isPermaLink="false">http://www.mithilasoftware.com/Blog/post.aspx?id=b47e8120-82fe-4d86-b621-061dcf0b89c7</guid>
      <pubDate>Tue, 06 Sep 2011 16:29:00 -0500</pubDate>
      <category>BlogEngine.NET</category>
      <category>Search Engine Optimization</category>
      <dc:publisher>HSJ</dc:publisher>
      <pingback:server>http://www.mithilasoftware.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.mithilasoftware.com/Blog/post.aspx?id=b47e8120-82fe-4d86-b621-061dcf0b89c7</pingback:target>
      <slash:comments>14</slash:comments>
      <trackback:ping>http://www.mithilasoftware.com/Blog/trackback.axd?id=b47e8120-82fe-4d86-b621-061dcf0b89c7</trackback:ping>
      <wfw:comment>http://www.mithilasoftware.com/Blog/post/2011/09/06/Fixing-BlogEngineNet-For-SEO-Requirements.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.mithilasoftware.com/Blog/syndication.axd?post=b47e8120-82fe-4d86-b621-061dcf0b89c7</wfw:commentRss>
    <feedburner:origLink>http://www.mithilasoftware.com/Blog/post.aspx?id=b47e8120-82fe-4d86-b621-061dcf0b89c7</feedburner:origLink></item>
  </channel>
</rss>

