<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
  <channel>
    <title>hunter concepts, inc</title>
    <description>creative development &amp; design</description>
    <link>http://www.hunterconcepts.com/rss</link>
    <lastBuildDate>Wed, 29 Jun 2011 23:03:08 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>RSS.NET: http://www.rssdotnet.com/</generator>
    <item>
      <title>The Result Class</title>
      <description>&lt;p&gt;Many-o-time I've been in a situation where I need to return more data from any given method and sometimes &lt;strong&gt;bool&lt;/strong&gt; just doesn't cut it. This isn't anything new but this might get you thinking about what would be useful as a return type for any given method
&lt;/p&gt;
&lt;pre&gt;
    public class Result&amp;lt;T&amp;gt; where T : class
    {
        public bool Equals(bool value)
        {
            if (value == null) return false;
            return Value.Equals(value);
        }

        public bool Value { get; set; }
        public List&amp;lt;string&amp;gt; Messages { get; set; }
        public T Entity { get; set; }

        public Result() : this(false, new List&amp;lt;string&amp;gt;(), default(T)) { }
        public Result(bool value) : this(value, new List&amp;lt;string&amp;gt;(), default(T)) { }
        public Result(bool value, IEnumerable&amp;lt;string&amp;gt; messages) : this(value, messages, default(T)) { }
        public Result(bool value, IEnumerable&amp;lt;string&amp;gt; messages, T entity)
        {
            Value = value;
            Messages = new List&amp;lt;string&gt;(messages);
            Entity = entity;
        }
    }
&lt;/pre&gt;

&lt;h4&gt;Usage:&lt;/h4&gt;

&lt;pre&gt;
    public Result&amp;lt;User&amp;gt; CreateUser(string firstName, string lastName, ...)
    {
        Result&amp;lt;&amp;gt; result = new Result&amp;lt;User&amp;gt;();

        result.Entity = Dao....

        result.Value = result.Entity.UserId &amp;gt; 0;

        if (!result.Value)
        {
            result.Messages.Add("User was not created successfully");
        }

        return result;
    }
&lt;/pre&gt;</description>
      <link>http://www.hunterconcepts.com/blog/25/c-sharp_the-result-class</link>
      <author>hunter concepts, inc</author>
      <pubDate>Wed, 29 Jun 2011 23:03:08 GMT</pubDate>
    </item>
    <item>
      <title>Windows Services and Installers</title>
      <description>&lt;p&gt;
I'm often running into Windows Service and Setup Project issues and I thought I might compile a list of useful resources to help you out if you've had problems as well.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/9k985bc9(v=vs.80).aspx"&gt;How to: Create Windows Services&lt;/a&gt;
&lt;p style="background: #f1f1f1; padding: 3px; margin: 3px 0";&gt;When you create a service, you can use a Visual Studio project template called Windows Service. This template automatically does much of the work for you by referencing the appropriate classes and namespaces, setting up the inheritance from the base class for services, and overriding several of the methods you're likely to want to override. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/zt39148a.aspx#Y732"&gt;Walkthrough: Creating a Windows Service Application in the Component Designer&lt;/a&gt;
&lt;p style="background: #f1f1f1; padding: 3px; margin: 3px 0";&gt;The procedures in this topic demonstrate creating a simple Windows Service application that writes messages to an event log.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/7a50syb3(v=vs.80).aspx"&gt;How to: Debug Windows Service Applications&lt;/a&gt;
&lt;p style="background: #f1f1f1; padding: 3px; margin: 3px 0";&gt;Because a service must be run from within the context of the Services Control Manager rather than from within Visual Studio, debugging a service is not as straightforward as debugging other Visual Studio application types. To debug a service, you must start the service and then attach a debugger to the process in which it is running. You can then debug your application using all of the standard debugging functionality of Visual Studio.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://www.hunterconcepts.com/blog/24/visual-studio_windows-services-and-installers</link>
      <author>hunter concepts, inc</author>
      <pubDate>Tue, 05 Apr 2011 21:35:39 GMT</pubDate>
    </item>
    <item>
      <title>Custom Lazy Loading</title>
      <description>&lt;p&gt;If you're in a non ORM environment and have are thinking of building something custom to lazy-load data, here are a couple of useful classes and their intended implementation. Both of these classes were built to suite my needs and expect the lazy loading method to take the parent object as its only parameter.
&lt;/p&gt;
&lt;br /&gt;
&lt;h4&gt;Lazy&amp;lt;TParent, TChild&amp;gt;&lt;/h4&gt;
&lt;br /&gt;
&lt;pre&gt;
    public class Lazy&amp;lt;TParent, TChild&amp;gt;
    {
        public Lazy(Func&amp;lt;TParent, TChild&amp;gt; func, TParent parent)
        {
            _func = func;
            _parent = parent;
        }

        bool _hasValue;
        TChild _value;
        TParent _parent;
        Func&amp;lt;TParent, TChild&amp;gt; _func;

        public TChild Value
        {
            get
            {
                if (!_hasValue)
                {
                    _value = _func(_parent);
                    _hasValue = true;
                }
                return _value;
            }
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;h4&gt;LazyList&amp;lt;TParent, TCollection&amp;gt;&lt;/h4&gt;
&lt;br /&gt;
&lt;pre&gt;
    public class LazyList&amp;lt;TParent, TCollection&amp;gt; : IList&amp;lt;TCollection&amp;gt;
    {
        public LazyList(Func&amp;lt;TParent, IList&amp;lt;TCollection&amp;gt;&amp;gt; func, TParent parent)
        {
            _func = func;
            _parent = parent;
        }

        TParent _parent;
        Func&amp;lt;TParent, IList&amp;lt;TCollection&amp;gt;&amp;gt; _func;

        IList&amp;lt;TCollection&amp;gt; _items;
        IList&amp;lt;TCollection&amp;gt; Items
        {
            get
            {
                if (_items == null)
                    _items = _func(_parent) ?? new List&amp;lt;TCollection&amp;gt;();
                return _items;
            }
        }
        
        #region IList&amp;lt;TCollection&amp;gt; Members
        int IList&amp;lt;TCollection&amp;gt;.IndexOf(TCollection item)
        {
            return Items.IndexOf(item);
        }

        void IList&amp;lt;TCollection&amp;gt;.Insert(int index, TCollection item)
        {
            Items.Insert(index, item);
        }

        void IList&amp;lt;TCollection&amp;gt;.RemoveAt(int index)
        {
            Items.RemoveAt(index);
        }

        TCollection IList&amp;lt;TCollection&amp;gt;.this[int index]
        {
            get { return Items[index]; }
            set { Items[index] = value; }
        }
        #endregion

        #region ICollection&amp;lt;TCollection&amp;gt; Members
        void ICollection&amp;lt;TCollection&amp;gt;.Add(TCollection item)
        {
            Items.Add(item);
        }

        void ICollection&amp;lt;TCollection&amp;gt;.Clear()
        {
            Items.Clear();
        }

        bool ICollection&amp;lt;TCollection&amp;gt;.Contains(TCollection item)
        {
            return Items.Contains(item);
        }

        void ICollection&amp;lt;TCollection&amp;gt;.CopyTo(TCollection[] array, int arrayIndex)
        {
            Items.CopyTo(array, arrayIndex);
        }

        int ICollection&amp;lt;TCollection&amp;gt;.Count
        {
            get { return Items.Count; }
        }

        bool ICollection&amp;lt;TCollection&amp;gt;.IsReadOnly
        {
            get { return Items.IsReadOnly; }
        }

        bool ICollection&amp;lt;TCollection&amp;gt;.Remove(TCollection item)
        {
            return Items.Remove(item);
        }
        #endregion

        #region IEnumerable&amp;lt;TCollection&amp;gt; Members
        IEnumerator&amp;lt;TCollection&amp;gt; IEnumerable&amp;lt;TCollection&amp;gt;.GetEnumerator()
        {
            return Items.GetEnumerator();
        }
        #endregion

        #region IEnumerable Members
        IEnumerator IEnumerable.GetEnumerator()
        {
            return Items.GetEnumerator();
        }
        #endregion
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;h4&gt;Usage&lt;/h4&gt;
&lt;br /&gt;
&lt;pre&gt;

    myObject.SomeLazy = new Lazy&amp;lt;MyObjectType, SomeLazyType&amp;gt;(GetSomeLazy, myObject);

    myObject.SomeList = new LazyList&amp;lt;MyObjectType, OtherObjectType&amp;gt;(
        SomeMethodThatTakes, myObject);
&lt;/pre&gt;</description>
      <link>http://www.hunterconcepts.com/blog/22/c-sharp_custom-lazy-loading</link>
      <author>hunter concepts, inc</author>
      <pubDate>Tue, 22 Mar 2011 14:57:42 GMT</pubDate>
    </item>
    <item>
      <title>MVC Front Loading - Part 2</title>
      <description>&lt;p&gt;
In my &lt;a href="http://hunterconcepts.com/blog/21/aspnetmvc2_aspnetmvcfrontloading"&gt;last Front Loading post&lt;/a&gt; I detailed how you could front-load data in your OnAuthorization method (you could use other methods, but this one seems appropriate). Further optimization led me to create a SetContext utility method that would do most of the repetitive functionality and allow me to quickly and clearly pull route values from the context and load that data generically.
&lt;/p&gt; 
&lt;pre&gt;
protected override void OnAuthorization(AuthorizationContext filterContext)
{
    base.OnAuthorization(filterContext);

    CurrentItem = SetContext&amp;lt;string, Item&gt;(filterContext,
"item", BOFactory.ItemBO.Get, true);

    CurrentThing = SetContext&amp;lt;int, Thing&gt;(filterContext,
"thing", BOFactory.ThingBO.Get, true);
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;The SetContext method takes the current context, a key to look up in the RouteValues collection, a method to point to that actually loads that data based on TKey, and then whether or not to redirect if the object was not found.
&lt;pre&gt;
TModel SetContext&amp;lt;TKey, TModel&gt;(AuthorizationContext context, 
    string key, Func&amp;lt;TKey, TModel&gt; func, bool redirectOnNull)
    where TModel : class
{
    string routeValue = HttpUtility.UrlDecode(
        Convert.ToString(context.RouteData.Values[key]));
    if (!string.IsNullOrEmpty(routeValue.ToString()))
    { 
        TKey k = default(TKey);

        if (typeof(TKey) == typeof(int))
        {
            int i;
            if (int.TryParse(routeValue, out i))
            {
                k = (TKey)(object)i;
            }
        }
        else
        {
            k = (TKey)(object)routeValue;
        }

        if (!k.Equals(default(TKey)))
        {
            TModel result = func(k);

            if (result == null &amp;&amp; redirectOnNull)
            {
                HandleContextError&amp;lt;TKey, TModel&gt;(context, "{0} '{1}' not found", 
                    typeof(TModel).Name, k);
            }

            return result;
        }
        else if (!string.IsNullOrEmpty(routeValue))
        {
            HandleContextError&amp;lt;TKey, TModel&gt;(context, "{0} '{1}' not found", 
                typeof(TModel).Name, k);
        }
    }

    return null;
}
&lt;/pre&gt;</description>
      <link>http://www.hunterconcepts.com/blog/23/asp-net-mvc-2_mvc-front-loading-part-2</link>
      <author>hunter concepts, inc</author>
      <pubDate>Wed, 26 Jan 2011 20:21:42 GMT</pubDate>
    </item>
    <item>
      <title>ASP.NET MVC Front Loading</title>
      <description>One way to manage data retrieval and permission checks in MVC is to front load data objects into the HttpContext and work totally off of the Context from your Action Methods. If you have a standard set of route values you can accomplish this easily by overriding the OnAuthorization method in your Controller (or preferably in a base Controller that all of your controllers inherit from).
&lt;div&gt;�&lt;/div&gt;
&lt;pre&gt;
protected override void OnAuthorization(AuthorizationContext filterContext)
{
    base.OnAuthorization(filterContext);
    string username = filterContext.RouteData.Values["username"] as string;
    if (!string.IsNullOrEmpty(username))
    {
        CurrentUser = // Load User from BO, DAO, or whereever
        if (CurrentUser == null)
        {
            // throw some exception or redirect because user doesn't exist
        }
        else
        {
            // check if this user is accessible by the logged in user or any other checks
        }
    }
}

public static User CurrentUser
{
    get 
    {
        return GetContextValue&amp;lt;User&gt;("CurrentUser"); 
    }
    set 
    {
        SetContextValue&amp;lt;User&gt;("CurrentUser", value); 
    }
}
&lt;/pre&gt;
&lt;div&gt;�&lt;/div&gt;
Now in your Action Methods you can simply reference CurrentUser and can always expect it to be populated since your base Controller has already found (or not found) and handled any bad data requests.</description>
      <link>http://www.hunterconcepts.com/blog/21/asp-net-mvc-2_asp-net-mvc-front-loading</link>
      <author>hunter concepts, inc</author>
      <pubDate>Fri, 24 Dec 2010 15:07:10 GMT</pubDate>
    </item>
    <item>
      <title>Resurrect</title>
      <description>&lt;p&gt;I ran into a problem when using a wizard type ajax interface where the &lt;a href="http://api.jquery.com/live/" target="_blank"&gt;live()&lt;/a&gt; jQuery events would become bound, bound, and then rebound, as you navigated back and forth through the wizard. To ensure that any live events would be properly set you need to call the &lt;a href="http://api.jquery.com/die/" target="_blank"&gt;die()&lt;/a&gt; method first and then rebind.&lt;/p&gt;

&lt;pre&gt;
$("#myClickableThing").die("click").live("click", function () {
    // do work
});
&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;And to add it as a new jQuery function you can try this:&lt;/p&gt;
&lt;br /&gt;
&lt;pre&gt;
jQuery.fn.resurrect = function (eventType, callback) {
    $(this).die(eventType).live(eventType, callback);
};
&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;Now you can call resurrect like this:&lt;/p&gt;
&lt;br /&gt;
&lt;pre&gt;
$("#myClickableThing").resurrect("click", function() { 
    // do work
});
&lt;/pre&gt;</description>
      <link>http://www.hunterconcepts.com/blog/17/jquery_resurrect</link>
      <author>hunter concepts, inc</author>
      <pubDate>Wed, 21 Jul 2010 09:55:01 GMT</pubDate>
    </item>
    <item>
      <title>VPN &amp; RDP Command</title>
      <description>&lt;p&gt;If you're always connecting to a VPN for the purpose of RDPing into a machine, try saving this script as a *.cmd and run it&lt;/p&gt;

&lt;pre&gt;
rasdial "VPN" /d

rasdial "VPN" username password

route delete AAA.AAA.AAA.AAA

route add AAA.AAA.AAA.AAA mask BBB.BBB.BBB.BBB CCC.CCC.CCC.CCC

mstsc.exe /v:XXX.XXX.XXX.XXX /f

exit /b
&lt;/pre&gt;
&lt;fieldset&gt;
&lt;legend&gt;Key&lt;/legend&gt;
&lt;div&gt;
&lt;label&gt;AAA.AAA.AAA.AAA&lt;/label&gt;&lt;span&gt;Any route you might need, skip this if you don't need them&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;label&gt;BBB.BBB.BBB.BBB, CCC.CCC.CCC.CCC&lt;/label&gt;&lt;span&gt;Route Mask&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;label&gt;VPN&lt;/label&gt;&lt;span&gt;The name of your VPN Connection&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;label&gt;username, password&lt;/label&gt;&lt;span&gt;username and password of your VPN Connections&lt;/span&gt;
&lt;/div&gt;
&lt;/fieldset&gt;

&lt;p&gt;What this will do is connect to a named VPN, add any routes you need, then call the Microsoft Terminal Services Client. If you've connected to that IP Address via RDP before and saved your credentials you won't have to enter them.&lt;/p&gt;</description>
      <link>http://www.hunterconcepts.com/blog/16/remote-desktop_vpn-rdp-command</link>
      <author>hunter concepts, inc</author>
      <pubDate>Wed, 17 Mar 2010 22:38:00 GMT</pubDate>
    </item>
    <item>
      <title>Strings</title>
      <description>&lt;h4&gt;ReplaceEx&lt;/h4&gt;
&lt;p&gt;Replace a string using an expression.&lt;/p&gt;
&lt;pre&gt;        public static string ReplaceEx(this string original, string pattern, string replacement)
        {
            int count = 0;
            int position0 = 0;
            int position1 = 0;

            string upperString = original.ToUpper();
            string upperPattern = pattern.ToUpper();

            int inc = (original.Length / pattern.Length) * (replacement.Length - pattern.Length);

            char[] chars = new char[original.Length + Math.Max(0, inc)];

            while ((position1 = upperString.IndexOf(upperPattern, position0)) != -1)
            {
                for (int i = position0; i &lt; position1; ++i)
                    chars[count++] = original[i];
                for (int i = 0; i &lt; replacement.Length; ++i)
                    chars[count++] = replacement[i];
            
                position0 = position1 + pattern.Length;
            }

            if (position0 == 0) return original;
            
            for (int i = position0; i &lt; original.Length; ++i)
                chars[count++] = original[i];

            return new string(chars, 0, count);
        }
&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4&gt;TruncateHtml&lt;/h4&gt;
&lt;p&gt;Truncate a string and remove HTML. This is useful for message boards, articles, etc, where you just want to show a portion of the text and the user would click into it to read more.&lt;/p&gt;
&lt;pre&gt;        public static string TruncateHtml(this string html, int max)
        {
            string result = Regex.Replace(html, @"&lt;(.|\n)*?&gt;", string.Empty);

            return Truncate(result, max);
        }
&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4&gt;Truncate&lt;/h4&gt;
&lt;p&gt;Truncates a string&lt;/p&gt;
&lt;pre&gt;        public static string Truncate(this string text, int max)
        {
            string result = text;

            if (result.Length &gt; max) result = result.Substring(0, max - 3) + "...";
            return result;
        }
&lt;/pre&gt;</description>
      <link>http://www.hunterconcepts.com/blog/15/extensions_strings</link>
      <author>hunter concepts, inc</author>
      <pubDate>Fri, 22 Jan 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>5 Free Things People Pay For</title>
      <description>&lt;h3&gt;Remote Desktop vs GoToMyPC&lt;/h3&gt;
&lt;p&gt;If you're looking to connect to your home computer from anywhere (given the fact that you know your IP Address or are using some type of Dynamic DNS) without paying for products like GoToMyPC.
&lt;div&gt; &lt;/div&gt;
It amazes me how some users aren't even aware that Remote Desktop has shipped with Windows for some time and is 100% free. Follow the steps in my previous post to get up and running.
&lt;div&gt;�&lt;/div&gt;
GoToMeeting still makes sense for group desktop sharing.
&lt;div&gt;�&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/windowsxp/using/mobility/getstarted/remoteintro.mspx" target="_blank"&gt;Remote Desktop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;h3&gt;Annual Credit Report vs FreeCreditScore&lt;/h3&gt;
&lt;p&gt;
The U.S. Government allows you free access to your Credit Report from all 3 major credit reporting companies once every 12 months.
&lt;div&gt;�&lt;/div&gt;
"This central site allows you to request a free credit file disclosure, commonly called a credit report, once every 12 months from each of the nationwide consumer credit reporting companies: Equifax, Experian and TransUnion."
&lt;div&gt;�&lt;/div&gt;
The tactics of Free Credit Score and Credit Score are truly deceptive. Unless you read the finest of their fine print you will be unwittingly subscribing to their "monitoring" services and can look forward to a nice monthly bill.
&lt;div&gt;�&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.annualcreditreport.com/" target="_blank"&gt;http://www.annualcreditreport.com/&lt;/a&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;h3&gt;Stack Overflow vs Experts Exchange&lt;/h3&gt;
&lt;p&gt;
Stack Overflow has been on the scene for some time now and has taken over the Q&amp;A market for developers. It is built on their Stack Exchange framework and has created a community where information is shared freely and points are coveted.&lt;div&gt;�&lt;/div&gt;
Experts Exchange is a paid subscription service that both limits the pool of "experts" that answer questions and has a terrible user interface. Not to mention their poor implementation due to the &lt;a href="http://www.walkernews.net/2007/08/18/how-to-bypass-experts-exchange-membership-restriction/" target="_blank"&gt;Google Caching Exploit&lt;/a&gt;. Nice work! You're giving away for free what your members are paying for!
&lt;div&gt;�&lt;/div&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/4099366/how-do-i-check-if-a-number-is-positive-or-negative-in-c/4099411#4099411" target="_blank"&gt;http://stackoverflow.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/p&gt;
&lt;h3&gt;Google Documents vs Microsoft Office&lt;/h3&gt;
&lt;p&gt;
With the securing of the online document market with Google Documents you can remove Microsofts steel-toes boot from your temple. Google Docs is free, open, and compatible with other popular document formats. You can also easily export to other popular types, all without software running on your computer.
&lt;div&gt;�&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://docs.google.com" target="_blank"&gt;http://docs.google.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;h3&gt;Shipping&lt;/h3&gt;
&lt;p&gt;
In this day and age you should never have to pay for shipping. 2010 saw many online vendors come around to this trend (most with a minimum purchase amount). If your preferred vendor doesn't offer Free Shipping check out Google Products to easily compare vendors and their shipping options.
&lt;div&gt;�&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.google.com/products" target="_blank"&gt;http://www.google.com/products&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;</description>
      <link>http://www.hunterconcepts.com/blog/19/random_5-free-things-people-pay-for</link>
      <author>hunter concepts, inc</author>
      <pubDate>Sun, 03 Jan 2010 20:21:18 GMT</pubDate>
    </item>
    <item>
      <title>Keyboard Shortcuts</title>
      <description>&lt;p&gt;There are a lot of resources out there for Visual Studio 2K8 and I wanted to try to come up with a better list of the more useful ones. Enjoy!&lt;/p&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;h4&gt;Editor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;CTRL + SPACE&lt;/h5&gt;
Brings up the Intellisense Dialog&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;ALT + ENTER&lt;/h5&gt;
Opens up the Properties window &lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;CTRL + K + S&lt;/h5&gt;
Prompts you to wrap selected text with code snippets (#region, foreach, etc.) &lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;CTRL + K + C&lt;/h5&gt;
Comments the highlighted text&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;CTRL + K + U&lt;/h5&gt;
Uncomments the highlighted text&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;F12&lt;/h5&gt;
Triggers the "Go to definition" command &lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;SHIFT + DEL&lt;/h5&gt;
Cuts the current row into the clipboard &lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;h4&gt;Debugging&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;CTRL + ALT + Q&lt;/h5&gt;
Opens up the Quick Watch Window while debugging &lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;F9&lt;/h5&gt;
Adds a breakpoint on the line where the cursor currently is&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;CTRL + SHIFT + F9&lt;/h5&gt;
Clears all breakpoints&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://www.hunterconcepts.com/blog/14/visual-studio_keyboard-shortcuts</link>
      <author>hunter concepts, inc</author>
      <pubDate>Tue, 15 Dec 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>HttpRequest, Form, &amp; QueryString</title>
      <description>&lt;div&gt;Finally rounded out a solution to get values in a generic way from the QueryString, Form, and HttpRequest. Some cases are there for ASP.Net and how it handles CheckBoxes. Applying this process to the ViewData is the same.&lt;/div&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;div class="barlight"&gt;Utility class for doing basic conversion&lt;/div&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;pre&gt;        internal static T Get(object input)
        {
            return Get(input, default(T));
        }

        internal static T Get(object input, T defaultValue)
        {
            T value = defaultValue;

            if (input != null)
            {
                if (input.ToString().Replace(" ", string.Empty).ToLower() == "true,false")
                {
                    string[] inputs = input.ToString().Split(',');
                    bool value0 = Boolean.Parse(inputs[0]);
                    bool value1 = Boolean.Parse(inputs[1]);

                    value = (T)Convert.ChangeType(value0 || value1, typeof(T));
                }
                else
                {
                        if (typeof(T).IsEnum)
                        {
                            int v = 0;
                            if (int.TryParse(input.ToString(), out v))
                                value = (T)Convert.ChangeType(input, typeof(int));
                            else
                                value = (T)Enum.Parse(typeof(T), input.ToString());
                        }
                        else if (typeof(T) == typeof(bool))
                        {
                            string v = input.ToString().ToLower();

                            if (v == "1" || v == "true")
                                value = (T)Convert.ChangeType("true", typeof(bool));
                            else if (v == "0" || v == "false")
                                value = (T)Convert.ChangeType("false", typeof(bool));
                        }
                        else if (typeof(T).IsGenericType &amp;&amp; typeof(T).GetGenericTypeDefinition().Equals(typeof(Nullable&lt;&gt;)))
                        {
                            NullableConverter nc = new NullableConverter(typeof(T));
                            Type underlyingType = nc.UnderlyingType;

                            if (underlyingType.IsEnum)
                            {
                                int v = 0;
                                if (int.TryParse(input.ToString(), out v))
                                    value = (T)Convert.ChangeType(input, typeof(int));
                                else
                                    value = (T)Enum.Parse(typeof(T), input.ToString());
                            }
                            else if (underlyingType == typeof(bool))
                            {
                                string v = input.ToString().ToLower();

                                if (v == "1" || v == "true")
                                    value = (T)Convert.ChangeType("true", typeof(bool));
                                else if (v == "0" || v == "false")
                                    value = (T)Convert.ChangeType("false", typeof(bool));
                            }
                            else
                            {
                                 value = (T)Convert.ChangeType(input, underlyingType);
                            }
                            }
                        }
                        else
                            value = (T)Convert.ChangeType(input, typeof(T));
                }            
            }
            return value;
        }
&lt;/pre&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;div class="barlight"&gt;Extension on the QueryString and Form via the NameValueCollection&lt;/div&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;pre&gt;    public static partial class Extensions
    {
        public static T Get(this NameValueCollection collection, string key)
        {
            return GetValue.Get(collection[key]);
        }

        public static T Get(this NameValueCollection collection, string key, T defaultValue)
        {
            return GetValue.Get(collection[key], defaultValue);
        }
    }
&lt;/pre&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;div class="barlight"&gt;Extension on the HttpRequest&lt;/div&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;pre&gt;    public static partial class Extensions
    {
        public static T Get(this HttpRequest request, string key)
        {
            return GetValue.Get(request[key]);
        }

        public static T Get(this HttpRequest request, string key, T defaultValue)
        {
            return GetValue.Get(request[key], defaultValue);
        }
    }
&lt;/pre&gt;</description>
      <link>http://www.hunterconcepts.com/blog/13/extensions_httprequest-form-querystring</link>
      <author>hunter concepts, inc</author>
      <pubDate>Wed, 09 Dec 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>DateTime</title>
      <description>&lt;div&gt;These two method extensions are useful for finding the real start and real end of any given DateTime and are useful when writing SQL Queries with LINQ or otherwise.
&lt;div&gt;�&lt;/div&gt;
&lt;div class="barlight"&gt;AbsoluteStart&lt;/div&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;pre&gt;
        public static DateTime AbsoluteStart(this DateTime dateTime)
        {
            return dateTime.Date;
        }
&lt;/pre&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;div class="barlight"&gt;AbsoluteEnd&lt;/div&gt;
&lt;div&gt;�&lt;/div&gt;
&lt;pre&gt;
        public static DateTime AbsoluteEnd(this DateTime dateTime)
        {
            return AbsoluteStart(dateTime).AddDays(1).AddTicks(-1);
        }&lt;/pre&gt;
&lt;/div&gt;</description>
      <link>http://www.hunterconcepts.com/blog/11/extensions_datetime</link>
      <author>hunter concepts, inc</author>
      <pubDate>Tue, 01 Dec 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Useful Methods</title>
      <description>&lt;div class="barlight"&gt;Gets the index of any element&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre&gt;function GetIndex($obj) {
    $obj = $($obj);
    return $obj.parent().children().index($obj);
}
&lt;/pre&gt;</description>
      <link>http://www.hunterconcepts.com/blog/10/jquery_useful-methods</link>
      <author>hunter concepts, inc</author>
      <pubDate>Tue, 03 Nov 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Selectors</title>
      <description>&lt;div&gt;Here's a list of useful &lt;a href="http://docs.jquery.com/Selectors" target="_blank"&gt;jQuery Selectors&lt;/a&gt; that I've used in the past. Enjoy!&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="barlight"&gt;Html Elements with a non-empty title attribute&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="overflowauto"&gt;
&lt;pre class="font8"&gt;$("input:text:[title][title!=],input:password:[title][title!=],textarea:[title][title!=],select:[title][title!=]")&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="barlight"&gt;Html Elements with one css class but not other css classes&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="overflowauto"&gt;
&lt;pre class="font8"&gt;$(".list .listitem:not(.skiplistitem):not(.bypasslistitem)")&lt;/pre&gt;
&lt;/div&gt;</description>
      <link>http://www.hunterconcepts.com/blog/7/jquery_selectors</link>
      <author>hunter concepts, inc</author>
      <pubDate>Sun, 05 Jul 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Tips and Tricks</title>
      <description>&lt;h4&gt;Hot Keys&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;"CTRL+ALT+END" starts the task manager&lt;/li&gt;
&lt;li&gt;"ALT+PAGE UP/ PAGE DOWN" toggles between programs&lt;/li&gt;
&lt;li&gt;"CTRL+ESC" toggles the client between a window and full screen.&lt;/li&gt;
&lt;li&gt;"ALT+HOME" shows the start menu&lt;/li&gt;
&lt;li&gt;"ALT+INSERT" cycles through programs in the order they were started&lt;/li&gt;
&lt;li&gt;"CTRL+ALT+MINUS [-]" adds a screenshot of the active window to the clipboard&lt;/li&gt;
&lt;li&gt;"CTRL+ALT+PLUS [+]" adds a screenshot of the desktop to the clipboard&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h4&gt;Command Prompt&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Run RDP from the command prompt "mstsc /v:  /w:640 /h: 480". You can also do "/f" for full screen&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://www.hunterconcepts.com/blog/18/remote-desktop_tips-and-tricks</link>
      <author>hunter concepts, inc</author>
      <pubDate>Tue, 14 Apr 2009 10:20:35 GMT</pubDate>
    </item>
    <item>
      <title>Summary</title>
      <description>&lt;p&gt;&lt;img class="padding5" style="float: right; max-height: 150px;" src="http://www.esquire.com/media/cm/esquire/images/high-five-0808-lg-76258126.jpg" border="0" alt="Remote Desktop Client" /&gt;&lt;/p&gt;
&lt;p&gt;That's it! You're all set! Enjoy connecting to your home computer from any other computer with Remote Desktop! There's a slew of information out there but I thought it would be helpful to get a complete "How To" from start to finish to get anyone up and running without really paying for anything!&lt;/p&gt;
&lt;h4&gt;References&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://remotedesktoprdp.com/Multiple-Remote-Desktop-Sessions.aspx"&gt;Remote Desktop FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      <link>http://www.hunterconcepts.com/blog/5/remote-desktop_summary</link>
      <author>hunter concepts, inc</author>
      <pubDate>Sun, 12 Apr 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Step 4 - Setup &amp; Test</title>
      <description>&lt;p&gt;Now you're ready to test if this actually works! On your own network you can simply enter in your computers name to see if it's working property. If you're in a remote location you need to use your�&lt;strong&gt;Static IP Address�&lt;/strong&gt;or your�&lt;strong&gt;Dynamic DNS Name&lt;/strong&gt;�(xxxxxx.dyndns.org).&lt;/p&gt;

&lt;p&gt;Remote Desktop Connection is found here:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows XP &amp; Windows 2000&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start =&gt; Programs =&gt; Accessories =&gt; Communications =&gt; Remote Desktop Connection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Windows Vista&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start =&gt; All Programs =&gt;Accessories =&gt; Remote Desktop Connection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enter in the�&lt;strong&gt;Dynamic DNS Address&lt;/strong&gt;�(xxxxxxx.dyndns.org) along with the�&lt;strong&gt;Username�&lt;/strong&gt;and�&lt;strong&gt;Password�&lt;/strong&gt;that you use to log on to your Home Computer. Having a Username &amp; Password is required so to set that up refer to Step 1. Click "&lt;strong&gt;Connect&lt;/strong&gt;" and you're on your way!&lt;/p&gt;
&lt;p&gt;At times I like to set up multiple versions of the same�&lt;strong&gt;Remote Desktop&lt;/strong&gt;�session. For instance, when I know I'll be on my home network, I crank up all of the Display &amp; Experience options and Save As "&lt;strong&gt;PC Name - High Bandwidth&lt;/strong&gt;", but if I know I'll be connecting from a coffee shop or a place that mind have low bandwidth, I'll scale back all of the Display &amp; Experience Options and Save As "&lt;strong&gt;PC Name - Low Bandwidth&lt;/strong&gt;". "&lt;strong&gt;Save As&lt;/strong&gt;" creates a shortcut to those settings for that specific connection so that you don't have to re-enter all of that information each time you want to connect.&lt;/p&gt;</description>
      <link>http://www.hunterconcepts.com/blog/6/remote-desktop_step-4-setup-test</link>
      <author>hunter concepts, inc</author>
      <pubDate>Sat, 11 Apr 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Step 3 - Allow Connection &amp; Firewall</title>
      <description>&lt;p&gt;
Now we can make sure that your computer is set up to allow connections to it using the Remote Desktop Protocol   Windows XP &amp; Windows 2000
Right click on My Computer and select Properties.
Select the Remote tab
Check "Allow Remote Connections"
Click OK to continue
Windows Vista
Right click on Computer and select Properties
Select "Remote Settings" from the menu on the left
In this dialog select the 2nd or 3rd option to "Allow Connections from computers..."
Click OK to continue
  If you have a Firewall running on your target PC you're going to need to open up port 3389 to allow RDP Traffic in. I will describe how to do this with Windows Firewall (comes with Windows, works well enough) but other Firewall software should be similar.   In Windows, navigate to your Control Panel, click on Security Center, select Windows Firewall, and click on "change settings". Once the Windows Firewall Settings dialog opens select the Exceptions tab. This will show you all of the current exceptions (allowed traffic rules) exposed. If you see "Remote Desktop" listed simply check the box and you're done. If not click the "Add port..." button and enter "Remote Desktop" for the name and "3389" for the port along with TCP and click "OK". Click OK once more to close the dialog and you should be good to go on the Firewall front.
&lt;img class="padding5" style="float: left; max-height: 200px;" src="http://www.ossramblings.com/files/images/firewall.png" alt="Firewall" /&gt;
&lt;/p&gt;</description>
      <link>http://www.hunterconcepts.com/blog/4/remote-desktop_step-3-allow-connection-firewall</link>
      <author>hunter concepts, inc</author>
      <pubDate>Fri, 10 Apr 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Step 2 - Router Configuration</title>
      <description>&lt;p&gt;If you're using a router to distrubute your internet connection from your service provider you can bind your Dynamic DNS information here instead of running a client application. I use a�&lt;a title="D-Link DI-724GU Office Router" href="http://www.dlink.com/products/?pid=493" target="_blank"&gt;D-Link DI-724GU Office Router&lt;/a&gt;�and a few LinkSys Routers and they've all had embedded Dynamic DNS Provider information in their respective admin consoles. If you don't know your Routers IP Address running &lt;strong&gt;"ipconfig"&lt;/strong&gt; in a Windows Command Prompt.�Copy the IP Address for Default Gateway into your favorite web browser.&lt;/p&gt;
&lt;p&gt;For my D-Link router this information is found under &lt;strong&gt;Tools =&gt; Dynamic DNS&lt;/strong&gt;. From this screen I can select the Server Address (DDNS Provider). Next I enter in the dynamic dns Host Name that DynDNS.com gave me upon registration (xxxxxxx.dyndns.org) along with my user name and password. Click Apply and your router should be periodically pinging your DDNS Provider.&lt;/p&gt;
&lt;p&gt;Unless you're doing a more &lt;a href="http://remotedesktoprdp.com/Change-Remote-Desktop-Port.aspx" target="_blank"&gt;advanced Remote Desktop network setup&lt;/a&gt; where you want to enable multiple RDP's on many different machines configuring your router to direct RDP traffic to a single machine is easy. Within my D-Link admin console this setting can be found at &lt;strong&gt;Advanced =&gt; Port Forwarding&lt;/strong&gt;. Here I enter in the name as "RDP", select the target machine on my home network from the drop down list, enter in TCP port 3389, and click Apply.&lt;/p&gt;</description>
      <link>http://www.hunterconcepts.com/blog/3/remote-desktop_step-2-router-configuration</link>
      <author>hunter concepts, inc</author>
      <pubDate>Thu, 09 Apr 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Step 1 - Dynamic DNS</title>
      <description>&lt;p&gt;The first thing you need to do is aquire a &lt;a title="Dynamic DNS" href="http://www.dyndns.com/services/dns/dyndns/" target="_blank"&gt;Dynamic DNS&lt;/a&gt; account. If you know you have a &lt;a title="static IP address" href="http://en.wikipedia.org/wiki/IP_address" target="_blank"&gt;static IP address&lt;/a&gt;, then you can probably skip this step. &lt;a title="DynDNS.com" href="https://www.dyndns.com/account/" target="_blank"&gt;DynDNS.com&lt;/a&gt; is a service that I use that is free and integrates with most routers that I've come across. There are many other &lt;a title="Dynamic DNS Service Providers" href="http://www.google.com/search?q=dynamic+dns+provider" target="_blank"&gt;Dyamic DNS Service Providers&lt;/a&gt;�out there so go ahead and pick the one you think has the best features. What a dynamic DNS service does is forward requests pointing to a friendly name (http://hunterconcepts.dyndns.org) to your dynamic IP address. &lt;img class="padding5" style="float: right; max-width: 150px;" src="http://www.dyndns.com/images/site/tango/dyndns.gif" alt="DynDns.org" /&gt;&lt;/p&gt;
&lt;p&gt;�&lt;/p&gt;
&lt;p&gt;In Step 2 I will explain how to bind this account information to your Router. If you do not have a router and have decided to go with DynDNS.com as a service provider, they have a &lt;a title="client application" href="http://www.dyndns.com/support/clients/" target="_blank"&gt;client application&lt;/a&gt; that will keep your hostname's IP address current.&lt;/p&gt;
&lt;div class="clear"&gt;�&lt;/div&gt;</description>
      <link>http://www.hunterconcepts.com/blog/1/remote-desktop_step-1-dynamic-dns</link>
      <author>hunter concepts, inc</author>
      <pubDate>Wed, 08 Apr 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Overview</title>
      <description>&lt;p&gt;&lt;img style="max-height: 200px; float: right;" src="http://lalizou.files.wordpress.com/2006/10/c.jpg" border="0" alt="Remote Desktop Client" /&gt;After getting asked this question by colleageus and clients I've decided to put together a brief series on "&lt;a title="Remote Desktop" href="http://en.wikipedia.org/wiki/Remote_Desktop_Protocol"&gt;Remote Desktop&lt;/a&gt;". Remote Desktop is a windows application based on a Microsoft protocol that you can use to connect to computers running Windows OS's as long as they allow connections and have the appropriate ports open on their firewall.
&lt;br /&gt;&lt;br /&gt;
Connecting to your home computer from another PC is easy and you don't need to pay for any additional software than what comes with any flavor of the Windows Operating system. If you haven't used it before Remote Desktop is a component that ships with Windows or can be downloaded and installed.
&lt;br /&gt;&lt;br /&gt;
Many people go out and purchase software like PC Anywhere or GoToMyPC, but that's unnecessary. Remote Desktop gives you exactly what you need if you just want to connect to your home PC as if you were sitting in front of it, depending on the speed of your internet connection. I have broke down the process from start to finish in a few easy Steps. I hope you find this helpful!&lt;/p&gt;</description>
      <link>http://www.hunterconcepts.com/blog/2/remote-desktop_overview</link>
      <author>hunter concepts, inc</author>
      <pubDate>Tue, 07 Apr 2009 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>