<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Joseph Bulger IV &#187; linkedIn</title>
	<atom:link href="http://josephbulger.com/tag/linkedin/feed/" rel="self" type="application/rss+xml" />
	<link>http://josephbulger.com</link>
	<description>God, Family, Church, Engineering</description>
	<lastBuildDate>Thu, 20 Oct 2011 12:00:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>How to resolve a complex type as a string implicitly</title>
		<link>http://josephbulger.com/programming/how-to-resolve-a-complex-type-as-a-string-implicitly/</link>
		<comments>http://josephbulger.com/programming/how-to-resolve-a-complex-type-as-a-string-implicitly/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 23:00:00 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[linkedIn]]></category>

		<guid isPermaLink="false">http://josephbulger.com/?p=305</guid>
		<description><![CDATA[Along the same lines as resolving a complex type in a conditional, I also want to be able to take the same Authorization Result, and use it to broadcast a message to the system (or user), and tell them why couldn’t they be authorized. An example of the behavior I’m looking for is something like [...]]]></description>
			<content:encoded><![CDATA[<p>Along the same lines as <a href="http://josephbulger.com/programming/how-to-use-a-complex-type-in-a-conditional/" target="_blank">resolving a complex type in a conditional</a>, I also want to be able to take the same Authorization Result, and use it to broadcast a message to the system (or user), and tell them why couldn’t they be authorized.<span id="more-305"></span></p>
<p>An example of the behavior I’m looking for is something like this:</p>
<pre class="brush: csharp; title: ; notranslate">
var authorizationResult = Is.CurrentUser.AuthorizedTo.DoSomething();
if (!authorizationResult)
    throw new AuthorizationException(authorizationResult);
</pre>
<p>The Authorization Exception takes a String in it&#8217;s constructor, just like a typical Exception. It does not take an AuthorizationResult. So how am I able to just pass in an authorizationResult like that? Again, the implicit operator is all we need:</p>
<pre class="brush: csharp; title: ; notranslate">
public class AuthorizationResult
{
    public bool IList&lt;reason&gt; Reasons { get; set; }
    public static implicit operator string(AuthorizationResult authorizationResult)
    {
        if (authorizationResult.With(x =&amp;gt; x.Reasons) == null)
            return false;
        var result = new StringBuilder();
        foreach (var reason in authorizationResult.Reasons)
        {
            result.AppendLine(reason.Message);
        }
        return result.ToString();
    }
}
</pre>
<p>Now I can use AuthorizationResult implicitly as both a bool and a string.</p>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/programming/how-to-resolve-a-complex-type-as-a-string-implicitly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to use a complex type in a conditional</title>
		<link>http://josephbulger.com/programming/how-to-use-a-complex-type-in-a-conditional/</link>
		<comments>http://josephbulger.com/programming/how-to-use-a-complex-type-in-a-conditional/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 14:38:57 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[linkedIn]]></category>

		<guid isPermaLink="false">http://josephbulger.com/?p=299</guid>
		<description><![CDATA[I am building a basic authorization framework, and I have really liked the use of it so far. It basically looks something like this The result that I get back is not actually a boolean, as you might thing. It&#8217;s a complex type that I built so I could not only determine if authorization was [...]]]></description>
			<content:encoded><![CDATA[<p>I am building a basic authorization framework, and I have really liked the use of it so far.</p>
<p>It basically looks something like this<span id="more-299"></span></p>
<pre class="brush: csharp; title: ; notranslate">
var result = Is.CurrentUser.AuthorizedTo.DoSomething();
</pre>
<p>The result that I get back is not actually a boolean, as you might thing.  It&#8217;s a complex type that I built so I could not only determine if authorization was successful or not, but also <strong>why not</strong>.</p>
<p>So you can do this:</p>
<pre class="brush: csharp; title: ; notranslate">
result.IsAuthorized
</pre>
<p>and you can also do this:</p>
<pre class="brush: csharp; title: ; notranslate">
result.WhyNot
</pre>
<p>WhyNot will actually give you back a list of Reasons, which you can then use to inform the system (or user) why they can&#8217;t do something.</p>
<p>So what&#8217;s the problem? Sometimes I just don&#8217;t care why not, I just want to do the check quickly and be done with it, which makes me want to do something like this instead:</p>
<pre class="brush: csharp; title: ; notranslate">
if (Is.CurrentUser.AuthorizedTo.DoSomething())
</pre>
<p>This won&#8217;t compile, because my complex type can&#8217;t resolve to a bool.  Not to worry, though, implicit operator to the rescue:</p>
<pre class="brush: csharp; title: ; notranslate">
public class AuthorizationResult
{
        public bool IsAuthorized { get; set; }
        public static implicit operator bool(AuthorizationResult authorizationResult)
        {
            if (authorizationResult == null)
                return false;
            return authorizationResult.IsAuthorized;
        }
}
</pre>
<p>Next post I&#8217;ll talk about how I do the same thing for outputting the reasons implicitly.</p>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/programming/how-to-use-a-complex-type-in-a-conditional/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creating an PagedList&lt;T&gt; that uses AJAX</title>
		<link>http://josephbulger.com/technology/creating-an-pagedlistt-that-uses-ajax/</link>
		<comments>http://josephbulger.com/technology/creating-an-pagedlistt-that-uses-ajax/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 16:05:58 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[linkedIn]]></category>
		<category><![CDATA[paging]]></category>

		<guid isPermaLink="false">http://josephbulger.com/technology/creating-an-pagedlistt-that-uses-ajax/</guid>
		<description><![CDATA[I’ve been using this PagedList functionality that i found from a blog article Rob Conery put up, and a control I found by Robert Muehsig which I’ve really enjoyed using so far. One of the things that was missing from the functional set that I ended up needing was the ability to page the list, [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been using this PagedList functionality that i found from a <a href="http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/" target="_blank">blog article Rob Conery</a> put up, and <a href="http://code-inside.de/blog-in/2008/04/08/aspnet-mvc-pagination-view-user-control/" target="_blank">a control I found by Robert Muehsig</a> which I’ve really enjoyed using so far.</p>
<p>One of the things that was missing from the functional set that I ended up needing was the ability to page the list, but through issuing AJAX requests instead of the typical post back.</p>
<p>So I went off and extended the existing model to support AJAX requests, and thought I would share it in case anyone else needed to do the same thing.<span id="more-249"></span></p>
<p>I guess the best place to start would be the use case.  So to start I created a control that encapsulates the Paging UI layout and calls I need.  The use of the original control looks like this:</p>
<pre class="brush: csharp; title: ; notranslate">

Html.RenderPartial(&quot;AjaxPagination&quot;,
    new AjaxPaginationViewData
        {
            PageIndex = Model.PageIndex,
            Action = &quot;CondoPage&quot;,
            Controller = &quot;Home&quot;,
            AjaxOptions =
                new AjaxOptions { UpdateTargetId = &quot;updatedContent&quot; },
            TotalCount = Model.TotalCount,
            PageSize = Model.PageSize,
            NumberOfPagesToEachSide = 2
        }
);
</pre>
<p>The new AJAX functionality is called similarly:</p>
<pre class="brush: csharp; title: ; notranslate">

&lt;% using (Ajax.BeginForm(&quot;SomePage&quot;,
        &quot;SomeController&quot;,
        new AjaxOptions { UpdateTargetId = &quot;updatedContent&quot; })) { %&gt;

        &lt;% Html.RenderPartial(&quot;AjaxPagination&quot;,
                new AjaxPaginationViewData {
                        PageIndex = Model.PageIndex,
                        Action = &quot;SomeAction&quot;,
                        Controller = &quot;SomeController&quot;,
                        AjaxOptions = new AjaxOptions
                                { UpdateTargetId = &quot;updatedContent&quot; },
                        TotalCount = Model.TotalCount,
                        PageSize = Model.PageSize,
                        NumberOfPagesToEachSide = 2
                });%&gt;

&lt;% } %&gt;
</pre>
<p>A couple things to note. You’ll notice that the AJAX control is rendered inside a Ajax.BeginForm. This is because I’m using the Microsoft.Ajax way of making AJAX calls.  This could also be done using jQuery or something else that can process AJAX calls. I just went this way because the scripts are already included in asp.net mvc app when you first create the project.  The result of the AJAX call will be a partial view, and we’ll need to put that somewhere.  That’s where the UpdatedTargetId comes into play. Other things we include in the AJAX control that are not in the original are the Action and the Controller, and some AjaxOptions. PageActionLink doesn’t work with the AJAX control, because we’ll be using Ajax.ActionLink to build the link, which is why I broke it up into Action, and Controller. For the AjaxOptions, we need those to specify the target of the call.</p>
<p>So now that’s been explained, let’s look at the controls themselves.  Here’s a comparison of the original control and the ajax control.</p>
<p>The original is one this way:</p>
<pre class="brush: csharp; title: ; notranslate">

&lt;% if (Model.HasPreviousPage) { %&gt;
    &lt;a href=&quot;&lt;%=Model.PageActionLink.Replace(&quot;%7Bpage%7D&quot;, (Model.PageIndex - 1).ToString())%&gt;&quot;&gt;Previous&lt;/a&gt;
&lt;% } %&gt;

&lt;% if (Model.GetFirstPageToLink() != 1) { %&gt;...&lt;% } %&gt;

&lt;%for (var page = Model.GetFirstPageToLink(); page &lt;= Model.GetLastPageToLink(); page++) {
    if (page == Model.PageIndex) { %&gt;
        &lt;%=page.ToString()%&gt;
&lt;% } else { %&gt;
    &lt;a href=&quot;&lt;%=Model.PageActionLink.Replace(&quot;%7Bpage%7D&quot;, page.ToString())%&gt;&quot;&gt;&lt;%=page.ToString()%&gt;&lt;/a&gt;
&lt;% }

    if (page != Model.GetLastPageToLink()) { %&gt;|&lt;% } } %&gt;

&lt;% if (Model.GetLastPageToLink() != Model.PageCount) { %&gt;...&lt;% } %&gt;

&lt;% if (Model.HasNextPage) { %&gt;
    &lt;a href=&quot;&lt;%=Model.PageActionLink.Replace(&quot;%7Bpage%7D&quot;, (Model.PageIndex + 1).ToString())%&gt;&quot;&gt;Next&lt;/a&gt;
&lt;% } %&gt;
</pre>
<p>And the AJAX control is done this way:</p>
<pre class="brush: csharp; title: ; notranslate">

&lt;% if (Model.HasPreviousPage) { %&gt;

&lt;%= Ajax.ActionLink(&quot;Previous&quot;, Model.Action, Model.Controller, new { page = (Model.PageIndex - 1).ToString() }, Model.AjaxOptions)%&gt;

&lt;% } %&gt;

&lt;% if (Model.GetFirstPageToLink() != 1) { %&gt;...&lt;% } %&gt;

&lt;%for (var page = Model.GetFirstPageToLink(); page &lt;= Model.GetLastPageToLink(); page++) {
    if (page == Model.PageIndex) { %&gt;
        &lt;%=page.ToString()%&gt;
    &lt;% } else { %&gt;

&lt;%= Ajax.ActionLink(page.ToString(), Model.Action, Model.Controller, new { page = page.ToString() }, Model.AjaxOptions)%&gt;

&lt;% } if (page != Model.GetLastPageToLink()) { %&gt; | &lt;% } } %&gt;

&lt;% if (Model.GetLastPageToLink() != Model.PageCount) { %&gt;...&lt;% } %&gt;

&lt;% if (Model.HasNextPage) { %&gt;

&lt;%= Ajax.ActionLink(&quot;Next&quot;, Model.Action, Model.Controller, new { page = (Model.PageIndex + 1).ToString() }, Model.AjaxOptions)%&gt;

&lt;% } %&gt;
</pre>
<p>The big difference here is the way that the links are generated. The original control simply creates an anchor tag and passes in the url generated by the Model. The AJAX control uses AJAX.ActionLink() instead, so we can have the link support AJAX.</p>
<p>So knowing how the control looks, this is the Model for the AJAX control itself:</p>
<pre class="brush: csharp; title: ; notranslate">

public class AjaxPaginationViewData
{
    public int NumberOfPagesToEachSide { get; set; }
    public int PageIndex { get; set; }
    public int PageSize { get; set; }
    public int TotalCount { get; set; }

    public string Action { get; set; }
    public string Controller { get; set; }

    public AjaxOptions AjaxOptions { get; set; }

    public int PageCount
    {
        get
        {
            return (int)Math.Ceiling((double)TotalCount / PageSize);
        }
    }
    public bool HasPreviousPage
    {
        get
        {
            return (PageIndex &gt; 1);
        }
    }

    public bool HasNextPage
    {
        get
        {
            return (PageIndex * PageSize) &lt;= TotalCount;
        }
    }

    public int GetFirstPageToLink()
    {
        return (PageIndex - NumberOfPagesToEachSide &gt; 1 ? PageIndex - NumberOfPagesToEachSide : 1);
    }

    public int GetLastPageToLink()
    {
        return (PageIndex + NumberOfPagesToEachSide &lt; PageCount ? PageIndex + NumberOfPagesToEachSide : PageCount);
    }
}
</pre>
<p>That pretty much explains how the control is built.</p>
<p>The only thing left is how the interaction with PagedList happens.  For that we look at the action that the control calls.  In this example, we’re calling SomeAction in SomeController, and it would look something like this:</p>
<pre class="brush: csharp; title: ; notranslate">

public ActionResult SomeAction(int page)
{
    CachedPage = page;
    var query = GetSearchQuery(CachedSearchParameters);
    var model = query.ToPagedList(page, DefaultPageSize);
    return PartialView(&quot;AjaxResults&quot;, model);
}
</pre>
<p>The ToPagedList performs the functionality that is included with the PagedList classes which you can find <a href="http://pagedlist.codeplex.com/" target="_blank">here</a>.</p>
<p>Let me know what you think, and if you’d like some demo source to see this in action I can happily provide, just let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/technology/creating-an-pagedlistt-that-uses-ajax/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Rethinking the Reputation System</title>
		<link>http://josephbulger.com/general/rethinking-the-reputation-system/</link>
		<comments>http://josephbulger.com/general/rethinking-the-reputation-system/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 15:51:06 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[linkedIn]]></category>
		<category><![CDATA[reputation system]]></category>
		<category><![CDATA[serve and trade]]></category>

		<guid isPermaLink="false">http://josephbulger.com/general/rethinking-the-reputation-system/</guid>
		<description><![CDATA[Just FYI, my wife is very wise.  I had her look over the design I came up for the reputation system.  She thought it would be easier if the user could just check off the things they wanted. Sometimes its just better to get a second opinion! This is the new concept.  Not much has [...]]]></description>
			<content:encoded><![CDATA[<p>Just FYI, my wife is very wise.  I had her look over the design I came up for the reputation system.  She thought it would be easier if the user could just check off the things they wanted.</p>
<p>Sometimes its just better to get a second opinion!</p>
<p>This is the new concept.  Not much has changed visually, but the behavior will definitely be different.</p>
<p><a href="http://josephbulger.com/wp-content/uploads/2009/09/newsearchconcept2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="newsearchconcept2" src="http://josephbulger.com/wp-content/uploads/2009/09/newsearchconcept2_thumb.png" border="0" alt="newsearchconcept2" width="543" height="312" /></a></p>
<p>So the behavior will be by checking off one of the items from the search you’ll be informing the owner that you’re interested in that item.  What happens after that point I’m still working out, but that basically wraps up the behavior for this side.  What we have left to do is get the behavior done for the owner’s side.</p>
<p>Now my problem is I need to design a checkbox that will go on the side so people can just to click on.</p>
<p>So far I’ve come up with this, but I’m not 100% satisfied with it.  The coloring won’t really get nailed down until we put it up on the site and tweak it to make the color scheme, but you get the idea.</p>
<p><a href="http://josephbulger.com/wp-content/uploads/2009/09/CheckBoxRegular.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CheckBox-Regular" src="http://josephbulger.com/wp-content/uploads/2009/09/CheckBoxRegular_thumb.png" border="0" alt="CheckBox-Regular" width="30" height="31" /></a></p>
<p>Any suggestions?</p>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/general/rethinking-the-reputation-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a Reputation System</title>
		<link>http://josephbulger.com/technology/building-a-reputation-system/</link>
		<comments>http://josephbulger.com/technology/building-a-reputation-system/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 01:53:57 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[Church]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[linkedIn]]></category>
		<category><![CDATA[reputation system]]></category>
		<category><![CDATA[serve and trade]]></category>

		<guid isPermaLink="false">http://josephbulger.com/general/building-a-reputation-system/</guid>
		<description><![CDATA[I’m working on a reputation system for a site I’ve been recently working on (http://www.serveandtrade.com).  I’m going through some ideas so I thought I’d post them on here and see what people think. Let’s start buy throwing up what we currently have so we can see where we’re trying to go.  Here’s a mockup of [...]]]></description>
			<content:encoded><![CDATA[<p>I’m working on a reputation system for a site I’ve been recently working on (<a href="http://www.serveandtrade.com">http://www.serveandtrade.com</a>).  I’m going through some ideas so I thought I’d post them on here and see what people think.</p>
<p>Let’s start buy throwing up what we currently have so we can see where we’re trying to go.  Here’s a mockup of what a user will see when they search for trades right now.</p>
<p><a href="http://josephbulger.com/wp-content/uploads/2009/09/currentsearchconcept1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="currentsearchconcept" src="http://josephbulger.com/wp-content/uploads/2009/09/currentsearchconcept_thumb1.png" border="0" alt="currentsearchconcept" width="539" height="309" /></a></p>
<p>I have a couple problems with how it works right now.</p>
<ol>
<li>I don’t like that it’s in a grid/table format.  I have to fix that first.  I’m moving more towards something like a list layout.</li>
<li>There are some things missing that I would like to be able to do.  For instance, if I just searched for “can of soup”, and I see that Michelle has the one I want, I would like to have a button/link/something to click on that says “I want that!”  Right now the only thing you can do is go look at the trade, or ask a question.</li>
<li>Clicking on the owner’s link takes you to their profile, but it doesn’t show you what other trades they have, or trades they are looking for.  That information could really be useful.</li>
</ol>
<p><span style="color: #eeeeee;">I’m sure there are other things I could think of, but for now I’m going to start focusing on these three and build some mockups to illustrate these workflows.</span></p>
<p>First, getting rid of the grid.</p>
<p><a href="http://josephbulger.com/wp-content/uploads/2009/09/newsearchconcept1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="newsearchconcept" src="http://josephbulger.com/wp-content/uploads/2009/09/newsearchconcept_thumb1.png" border="0" alt="newsearchconcept" width="539" height="309" /></a></p>
<p>This search list looks a lot better I think.  There are some more features on here then the other one, but we’ll go over those in subsequent posts.</p>
<p>So at this point I’m looking for any feedback.  ANY feedback, good or bad… I’ll take it all.  I really haven’t made up my mind at this point yet, but I think I’m heading in the right direction.</p>
<p>Next post will be about the “I want it!” feature.  Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/technology/building-a-reputation-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Mock that Rocks</title>
		<link>http://josephbulger.com/technology/the-mock-that-rocks/</link>
		<comments>http://josephbulger.com/technology/the-mock-that-rocks/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 17:19:07 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[balsamiq]]></category>
		<category><![CDATA[linkedIn]]></category>
		<category><![CDATA[mockup]]></category>
		<category><![CDATA[project]]></category>

		<guid isPermaLink="false">http://josephbulger.com/?p=128</guid>
		<description><![CDATA[I&#8217;ve discovered a product that I really enjoy using and thought I would share it.  It&#8217;s called Balsamiq Mockups and it&#8217;s a tool that you can use online or on your computer for drawing up quick ideas on software systems.  They use a sketchy kind of font to give you that &#8220;drawing out a spec&#8221; feel.  [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve discovered a product that I really enjoy using and thought I would share it.  It&#8217;s called <a title="Balsamiq Mockups" href="http://www.balsamiq.com/products/mockups">Balsamiq Mockups</a> and it&#8217;s a tool that you can use online or on your computer for drawing up quick ideas on software systems.  They use a sketchy kind of font to give you that &#8220;drawing out a spec&#8221; feel.  What really makes the product so appealing is how fast you can build up a simple mock to show to your team.  I&#8217;m literally able to sit down at my computer and within 5 minutes have a meaningful mockup of some kind of feature I want to convey.  Really powerful stuff.</p>
<p>Here&#8217;s an example of the kind of thing you can build with it.</p>
<div id="attachment_130" class="wp-caption alignnone" style="width: 488px"><a href="http://www.balsamiq.com/products/mockups"><img class="size-full wp-image-130     " title="Balsamiq Demo" src="http://josephbulger.com/wp-content/uploads/2009/07/balsamiqdemo.png" alt="Balsamiq Demo" width="478" height="282" /></a><p class="wp-caption-text">Balsamiq Demo</p></div>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/technology/the-mock-that-rocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ had it right, Multiple Inheritance Rocks, Single Inheritance&#8230; not so much.</title>
		<link>http://josephbulger.com/technology/c-had-it-right-multiple-inheritance-rocks-single-inheritance-not-so-much/</link>
		<comments>http://josephbulger.com/technology/c-had-it-right-multiple-inheritance-rocks-single-inheritance-not-so-much/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 16:31:21 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[contracts]]></category>
		<category><![CDATA[inheritance]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linkedIn]]></category>

		<guid isPermaLink="false">http://josephbulger.com/?p=60</guid>
		<description><![CDATA[I&#8217;ve been having a lot of problems with my coding lately. I primarily program in C#, but I originally came from a C++ world. When I first learned Java, and was introduced to the idea of Single Inheritance, the sales pitch made a lot of sense to me. How can any class really derive from [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been having a lot of problems with my coding lately. I primarily program in C#, but I originally came from a C++ world. When I first learned Java, and was introduced to the idea of Single Inheritance, the sales pitch made a lot of sense to me. How can any class really derive from multiple classes? I drank the kool-aid, and I’ve been living in a Single Inheritance world ever since.</p>
<p>Now, the caveat to all of this was that you had this thing called an interface that actually allowed you to define declarations of behavior that could later be implemented. This could be done any number of times. This also made a lot of sense, and they would do some simplistic model that illustrates the concept. I imagine for purposes of this article we should probably illustrate something as well just to drive home the point. Let’s say you have a Coin. A Coin is a kind of Currency. So the simple inheritance chain would dictate that Coin inherits from Currency, and everything is fine. Of course, in order for this to matter at all, there needs to be some benefit to having Coin inherit from Currency. So let’s say that Currency has some behavior called CalculateBuyingPower that actually figures out what kind of buying power that particular Currency has. Ok, so now we have an inheritance chain, and we have a direct benefit, figuring out the buying power of the Coin.</p>
<p>If that’s as far as you take it, then everything’s all fine and dandy, and Single Inheritance is great. The problem is, that in the Real World, what we call Objects can legitimately “be” multiple things. This is equally true in the Software World. So, going back to the Coin, not only is the Coin a Currency, but the Coin is also a MetalConstruct. A MetalConstruct is just my way of saying something that is made of metal. Why do I care? Simple. At some point during the life of a Coin, it is entirely possible that the buying power of the Coin will reach a point that it would actually be better to melt down the Coin because the value of the Metal in the coin is much higher (look at what a penny is made of nowadays and you’ll see what I mean). Now, a lot of you are going to say, “That’s fine, just define a MetalConstruct interface and you should be good to go.” In a lot of cases that might be true, but in this example we fine a very big problem. The point of the MetalConstruct is to normalize the behavior of melting down the Coin. No matter what kind of MetalConstruct you have, the melting process for it is always going to be the same. Sure there are variations in melting temperature and what not, but the overall process is the same. The point being, that an interface can only declare that behavior MeltDown should exist, but not define the implementation of it. This is the problem with Single Inheritance. I now need a way for the Coin to be both a Currency and MetalConstruct, which provides the Coin with behaviors CalculateBuyingPower and MeltDown. Coin shouldn’t have to define how to do either of those behaviors, because that’s not it’s <a title="Single Responsibility Principle" href="http://en.wikipedia.org/wiki/Single_responsibility_principle">responsibility</a>.</p>
<p>During software development, when you’re working on defining your domain, this can come up quite often, actually. With the advent of extension methods in .NET, you’re able to ease the pain a bit in C#, but the fundamental problem is really still there. What I would like to see would be one of two things. It would be nice if you could inherit from multiple abstract classes, which would allow you to define Contracts at the abstract class level. Another idea would be to bring forward the construct of a contract as a <a title="First-Class Citizen" href="http://en.wikipedia.org/wiki/First-class_citizen">first-class citizen</a>, it would be similar to an abstract class and an interface in the sense that you could not create one directly, but would allow for definition of behavior while still being able to have a class implement numerous contracts. It would be a totally new way of defining an object, apart from class, struct, or interface entirely perhaps.</p>
<p>So now I’m looking back at C++ and I’m thinking it would be really nice if I had Multiple Inheritance so I can just get past this ridiculous wall I’m having to climb. Possibly with .NET 4.0, Microsoft is bringing forth the idea of Code Contracts , which might help when you’re trying to get around Single Inheritance issues when dealing with <a title="Design by Contract" href="http://en.wikipedia.org/wiki/Design_by_Contract">Design by Contract</a>, but for real domain model issues, I think the problem still remains.</p>
<p>Food for thought.</p>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/technology/c-had-it-right-multiple-inheritance-rocks-single-inheritance-not-so-much/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Client just went live</title>
		<link>http://josephbulger.com/consulting/client-just-went-live/</link>
		<comments>http://josephbulger.com/consulting/client-just-went-live/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 13:57:14 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[diamond]]></category>
		<category><![CDATA[engagement ring]]></category>
		<category><![CDATA[linkedIn]]></category>

		<guid isPermaLink="false">http://josephbulger.com/?p=57</guid>
		<description><![CDATA[Hey guys, just had a client go live.&#160; Interested in buying a diamond or engagement ring for your lady?&#160; Check out http://www.edwardjamesandco.com.&#160; Edward not only sells a large arrangement of engagement rings, but he has a huge selection of loose diamonds. On a personal note, I’ve been working with Edward for the past 6 or [...]]]></description>
			<content:encoded><![CDATA[<p>Hey guys, just had a client go live.&#160; Interested in buying a diamond or engagement ring for your lady?&#160; Check out <a href="http://www.edwardjamesandco.com">http://www.edwardjamesandco.com</a>.&#160; Edward not only sells a large arrangement of engagement rings, but he has a huge selection of loose diamonds.</p>
<p>On a personal note, I’ve been working with Edward for the past 6 or so months, and he’s a really great guy.&#160; The next time I buy my wife something of this caliber I’m definitely going to be going to him.</p>
<p>Even if you’re not in the market right now, go check out the site anyway.&#160; He has a wealth of knowledge about diamonds and rings: what to look for in a diamond or setting, and other information about how the entire certification process works.&#160; He’ll be updating his site regularly to keep people informed of his industry, so if you’re into diamonds you might want to consider registering on his site just for informational reasons.</p>
<p>Anyway, that’s my two cents, take care guys!</p>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/consulting/client-just-went-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The SRP Swiss Army Knife</title>
		<link>http://josephbulger.com/programming/the-srp-swiss-army-knife/</link>
		<comments>http://josephbulger.com/programming/the-srp-swiss-army-knife/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 15:06:41 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[linkedIn]]></category>
		<category><![CDATA[SOLID]]></category>
		<category><![CDATA[SRP]]></category>

		<guid isPermaLink="false">http://josephbulger.bulgerblog.com/?p=18</guid>
		<description><![CDATA[I read this blog a few weeks back, and while the principles that the author was trying to convey I don’t disagree with, I did have a hard time stomaching the idea that Swiss army knives made for bad OOP design.  Why?  Because I really like Swiss army knives!  I mean come on, what other [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>I read this <a href="http://www.lostechies.com/blogs/gabrielschenker/archive/2009/01/21/real-swiss-don-t-need-srp-do-they.aspx">blog</a> a few weeks back, and while the principles that the author was trying to convey I don’t disagree with, I did have a hard time stomaching the idea that Swiss army knives made for bad OOP design.  Why?  Because I really like Swiss army knives!  I mean come on, what other device lets you have 100+ different kinds of knives, a compass, a light, a magnifying glass, and a USB drive all in one “disappears in your pocket” size container???</p>
<p>Ok so I know what most of you are thinking… I’m just PROVING that they violate SRP right?  Not actually.  In case you’re not familiar with the principle of SRP, check out this <a href="http://en.wikipedia.org/wiki/Single_responsibility_principle">wiki</a>.  The reason why I believe the Swiss army knife does NOT violate SRP is because my general rule of them is, if I can state the responsibility of the object in question in one single statement, then I have identified it’s SINGLE responsibility.  So I have to ask myself, what is the SINGLE thing that a Swiss army knife does?</p>
<p><em>Responsibility statement</em>:<em> <strong>A Swiss army knife is responsible for allowing it’s user to be able to use any tool that has been installed into it</strong></em>.</p>
<p>Short, simple, and to the point.  Now, that sounds all fine and dandy, but if I don’t implement the code the way I’ve dictated in my statement, then I will violate SRP, so how is it that I build a Swiss army knife while preserving my responsibility statement?  Enter code.</p>
<div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px;">
<div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;">
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> SwissArmyKnife</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #606060">   2:</span> {</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060">   3:</span>     ITool PullOutTool(ITool tool);</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #606060">   4:</span>     <span style="color: #0000ff">void</span> PutAwayTool(ITool tool);</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060">   5:</span> </pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #606060">   6:</span>     IList Tools { get; }</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060">   7:</span> </pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #606060">   8:</span>     ITool ToolBeingUsed { get; set; }</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060">   9:</span> }</pre>
<p> </p></div>
<p> </p></div>
<p>My interface defines any type of Swiss army knife I ever wish to make.  It’s only responsibility is to be able to use a tool that it has.  So then how do you use the Tool?  Well here’s how an ITool might look like:</p>
<div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px;">
<div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;">
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> ITool</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #606060">   2:</span> {</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px;"><span style="color: #606060">   3:</span>     <span style="color: #0000ff">void</span> Use();</pre>
<pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px;"><span style="color: #606060">   4:</span> }</pre>
<p> </p></div>
<p> </p></div>
<p>Now you can get any tool from the Swiss army knife and then use it.  Notice that it’s NOT the responsibility of the Swiss army knife to know HOW to USE the tool, only to get it out or put it away.</p>
<p>So what would violate SRP then?  Why did the author choose this particular product to harp on?  I think it was a matter of perspective really.  The article I read had numerous pictures of knives all decked out such as this one. Here is where I believe the real trickery is.  The author shows the pictures of all the swiss army knives with all the tools exposed.  If you really tried to use the knife like this, you would probably really screw up your hand!  That’s my point.  The knife is not of any use to anyone unless you’re using ONE tool at a time.  This is why SRP is not being violated.</p>
<p>You might take this a step further and say that you have a Swiss army Factory that would actually build the Swiss army knives, but that would be a discussion for another day.</p>
<p>Anyway, I hope everyone has found this interesting, till next time!</p></div>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/programming/the-srp-swiss-army-knife/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Light up the world in Silverlight!</title>
		<link>http://josephbulger.com/programming/light-up-the-world-in-silverlight/</link>
		<comments>http://josephbulger.com/programming/light-up-the-world-in-silverlight/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 15:03:52 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[linkedIn]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://josephbulger.bulgerblog.com/?p=14</guid>
		<description><![CDATA[I just finished watching a variety of videos from Mike Taulty about learning Silverlight.  These are exceptionally good videos and I would suggest anyone that is trying to learn Silverlight OR Windows Presentation Foundation (WPF) to take a look at them.  Here are links to all the videos. Silverlight &#8211; Hello World Silverlight &#8211; Anatomy [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>I just finished watching a variety of videos from Mike Taulty about learning Silverlight.  These are exceptionally good videos and I would suggest anyone that is trying to learn Silverlight OR Windows Presentation Foundation (WPF) to take a look at them. </p>
<p>Here are links to all the videos.</p>
<ol>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl08_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Hello-World/"><strong>Silverlight &#8211; Hello World</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl07_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Anatomy-of-an-Application/"><strong>Silverlight &#8211; Anatomy of an Application</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl06_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-The-VS-Environment/"><strong>Silverlight &#8211; The VS Environment</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl05_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Content-Controls/"><strong>Silverlight &#8211; Content Controls</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl04_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Built-In-Controls/"><strong>Silverlight &#8211; Built-In Controls</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl03_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Width-Height-Margins-Padding-Alignment/"><strong>Silverlight &#8211; Width, Height, Margins, Padding, Alignment</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl02_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-a-GridSplitter/"><strong>Silverlight &#8211; Using a GridSplitter</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl01_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Grid-Layout/"><strong>Silverlight &#8211; Grid Layout</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl09_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-StackPanel-Layout/"><strong>Silverlight &#8211; StackPanel Layout</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl08_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Canvas-Layout/"><strong>Silverlight &#8211; Canvas Layout</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl07_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Databinding-UI-to-NET-Classes/"><strong>Silverlight &#8211; Databinding UI to .NET Classes</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl06_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Simple-Styles/"><strong>Silverlight &#8211; Simple Styles</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl05_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Custom-Types-in-XAML/"><strong>Silverlight &#8211; Custom Types in XAML</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl04_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Binding-with-Conversion/"><strong>Silverlight &#8211; Binding with Conversion</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl03_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-List-Based-Data-Binding/"><strong>Silverlight &#8211; List Based Data Binding</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl02_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Simple-User-Control/"><strong>Silverlight &#8211; Simple User Control</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl01_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Templating-a-Button/"><strong>Silverlight &#8211; Templating a Button</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl09_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Resources-from-XAPDLLSite-Of-Origin/"><strong>Silverlight &#8211; Resources from XAP/DLL/Site Of Origin</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl08_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Animations--Storyboards/"><strong>Silverlight &#8211; Animations &amp; Storyboards</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl07_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Uploads-with-WebClient/"><strong>Silverlight &#8211; Uploads with WebClient</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl06_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Downloads-with-WebClient/"><strong>Silverlight &#8211; Downloads with WebClient</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl05_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Calling-HTTPS-Web-Services/"><strong>Silverlight &#8211; Calling HTTPS Web Services</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl04_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Calling-Web-Services/"><strong>Silverlight &#8211; Calling Web Services</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl03_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Making-Cross-Domain-Requests/"><strong>Silverlight &#8211; Making Cross Domain Requests</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl02_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-HttpWebRequest/"><strong>Silverlight &#8211; Using HttpWebRequest</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl01_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-File-Dialogs-and-User-Files/"><strong>Silverlight &#8211; File Dialogs and User Files</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl09_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-Sockets/"><strong>Silverlight &#8211; Using Sockets</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl08_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-Isolated-Storage/"><strong>Silverlight &#8211; Using Isolated Storage</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl07_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-NET-Code-Modifying-HTML/"><strong>Silverlight &#8211; .NET Code Modifying HTML</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl06_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-Isolated-Storage-Quotas/"><strong>Silverlight &#8211; Using Isolated Storage Quotas</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl05_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Calling-JavaScript-from-NET/"><strong>Silverlight &#8211; Calling JavaScript from .NET</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl04_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Evaluating-JavaScript-from-NET-Code/"><strong>Silverlight &#8211; Evaluating JavaScript from .NET Code</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl03_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Handling-HTML-Events-in-NET-Code/"><strong>Silverlight &#8211; Handling HTML Events in .NET Code</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl02_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Handling-NET-Events-in-JavaScript/"><strong>Silverlight &#8211; Handling .NET Events in JavaScript</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl01_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Calling-NET-from-JavaScript/"><strong>Silverlight &#8211; Calling .NET from JavaScript</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl09_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Displaying-a-Custom-Splash-Screen/"><strong>Silverlight &#8211; Displaying a Custom Splash Screen</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl08_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Passing-Parameters-from-your-Web-Page/"><strong>Silverlight &#8211; Passing Parameters from your Web Page</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl07_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Loading-Media-at-Runtime/"><strong>Silverlight &#8211; Loading Media at Runtime</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl06_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Dynamically-Loading-AssembliesCode/"><strong>Silverlight &#8211; Dynamically Loading Assemblies/Code</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl05_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-ReadingWriting-XML/"><strong>Silverlight &#8211; Reading/Writing XML</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl04_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-Silverlight-Streaming/"><strong>Silverlight &#8211; Multiple Threads with BackgroundWorker</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl03_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-InsertUpdateDelete-with-the-DataGrid/"><strong>Silverlight &#8211; Insert/Update/Delete with the DataGrid</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl02_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Getting-Started-with-the-DataGrid/"><strong>Silverlight &#8211; Getting Started with the DataGrid</strong></a></li>
<li><a id="ctl00_MainPlaceHolder_EntryList_ctl01_EntryTemplate_TitleLink" href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Embedding-Custom-Fonts/"><strong>Silverlight &#8211; Embedding Custom Fonts</strong></a></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://josephbulger.com/programming/light-up-the-world-in-silverlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

