<?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>shepherdweb.com &#187; C#.NET</title>
	<atom:link href="http://shepherdweb.com/category/web-code/cnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://shepherdweb.com</link>
	<description>Shane Shepherd: web design and development; music</description>
	<lastBuildDate>Wed, 11 Nov 2009 01:46:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>ASP.NET Membership Provider Web Service</title>
		<link>http://shepherdweb.com/2009/10/31/asp-net-membership-provider-web-service/</link>
		<comments>http://shepherdweb.com/2009/10/31/asp-net-membership-provider-web-service/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 15:48:57 +0000</pubDate>
		<dc:creator>Shane</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#.NET]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://shepherdweb.com/?p=176</guid>
		<description><![CDATA[A couple of years ago I was in need of a full featured membership provider provided over web services. I found Shaun Wilde&#8217;s project. Shaun&#8217;s project provided a membership and role provider over web services, but lacked a profile provider. I added the profile provider. I ended up changing directions with the project I was [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of years ago I was in need of a full featured membership provider provided over web services.  I found <a href="http://www.codeproject.com/KB/aspnet/WSSecurityProvider.aspx">Shaun Wilde&#8217;s project</a>.  Shaun&#8217;s project provided a membership and role provider over web services, but lacked a profile provider.  I added the profile provider.  </p>
<p>I ended up changing directions with the project I was working on and this code never got used in production.  Testing on it was minimal and I haven&#8217;t touched it two years.  However, I have received a large number of requests for the code&#8230;so here it is:</p>
<p><a href="http://shepherdweb.com/lab/2009/MembershipAgent/MembershipAgent.zip">ASP.NET 2.0 Web Service Membership, Role, and Profile Provider</a></p>
<p>Feel free to post enhancements or suggestions here.</p>
<div class="techtags"><p>Technorati Tags: <a href="http://technorati.com/tag/asp.net" rel="tag">asp.net</a>, <a href="http://technorati.com/tag/membership+provider" rel="tag"> membership provider</a>, <a href="http://technorati.com/tag/role+provider" rel="tag"> role provider</a>, <a href="http://technorati.com/tag/profile+provider" rel="tag"> profile provider</a></p></div>
]]></content:encoded>
			<wfw:commentRss>http://shepherdweb.com/2009/10/31/asp-net-membership-provider-web-service/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to Point CompareValidator&#8217;s ControlToCompare Attribute at a HiddenField</title>
		<link>http://shepherdweb.com/2007/01/30/how-to-point-comparevalidators-controltocompare-attribute-at-a-hiddenfield/</link>
		<comments>http://shepherdweb.com/2007/01/30/how-to-point-comparevalidators-controltocompare-attribute-at-a-hiddenfield/#comments</comments>
		<pubDate>Tue, 30 Jan 2007 20:23:29 +0000</pubDate>
		<dc:creator>Shane</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#.NET]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.shepherdweb.com/2007/01/30/how-to-point-comparevalidators-controltocompare-attribute-at-a-hiddenfield/</guid>
		<description><![CDATA[If you point the ControlToCompare attribute of the CompareValidator at a HiddenField you&#8217;ll get an error that looks something like this: Control &#8216;hiddenBalance&#8217; referenced by the ControlToCompare property of &#8216;CompareValidator1&#8242; cannot be validated. With a small amount of &#8220;googling&#8221; I found two useful articles: Validating against the value in a hidden input MS KB Article [...]]]></description>
			<content:encoded><![CDATA[<p>If you point the <code>ControlToCompare</code> attribute of the <code>CompareValidator</code> at a <code>HiddenField</code> you&#8217;ll get an error that looks something like this:</p>
<blockquote><p>Control &#8216;hiddenBalance&#8217; referenced by the ControlToCompare property of &#8216;CompareValidator1&#8242; cannot be validated.</p>
</blockquote>
<p>With a small amount of &#8220;googling&#8221; I found two useful articles:</p>
<ul>
<li><a href="http://www.dotnet247.com/247reference/msgs/55/275332.aspx" title="newsgroup article from microsoft.public.dotnet.framework.aspnet.webcontrols">Validating against the value in a hidden input</a></li>
<li><a href="http://support.microsoft.com/kb/310082" title="How to extend a Web Form control to work with the validation controls by using Visual Basic .NET or Visual Basic 2005">MS KB Article 310082</a></li>
</ul>
<p>Between these two article I pieced together a solution.</p>
<h2>The Solution</h2>
<ol>
<li>Create a new web project and add it to your solution.  I called my project &#8220;CompareValidatorHelper&#8221;.</li>
<li>Right click on the project and select <em>Add</em> and the <em>Class&hellip;</em>.  I also named my class &#8220;CompareValidatorHelper&#8221;.</li>
<li>Paste the following C# code into the class:
<p><code class="block"><br />
using System;<br />
using System.Web;<br />
using System.Web.UI;<br />
using System.Web.UI.WebControls;<br />
using System.Web.UI.HtmlControls;<br />
using System.ComponentModel;<br />
namespace CompareValidatorHelper<br />
{<br />
    [DefaultProperty(&quot;Value&quot;), ValidationProperty(&quot;Value&quot;), ToolboxData(&quot;&lt;{0}:VHiddenField runat=server&gt;&lt;/{0}:VHiddenField&gt;&quot;)]<br />
    public class VHiddenField : System.Web.UI.WebControls.HiddenField<br />
    {<br />
    }<br />
}<br />
</code>
</li>
<li>Build the project and add a reference to it in your web application project.</li>
<li>Register the inherited control at the top of your page:<br />
<code class="block">&lt;%@ Register TagPrefix=&quot;custom&quot; Namespace=&quot;CompareValidatorHelper&quot; Assembly=&quot;CompareValidatorHelper&quot; %&gt;</code>
</li>
<li>Add the <code>HiddenField</code> control to your page:<br />
<code class="block">&lt;custom:VHiddenField ID=&quot;hiddenBalance&quot; runat=&quot;server&quot; Value='&lt;%# Eval(&quot;Balance&quot;) %&gt;' /&gt;</code>
</li>
<li>Finally, set the <code>ControlToCompare</code> attribute of your <code>CompareValidator</code> equal to the <code>ID</code> attribute of your <code>HiddenField</code>:<br />
<code class="block">&lt;asp:CompareValidator ID=&quot;CompareValidator1&quot; Display=&quot;Dynamic&quot; runat=&quot;server&quot; Type=&quot;Double&quot; Operator=&quot;LessThanEqual&quot; ErrorMessage=&quot;Overpayments are not allowed.&quot; ControlToCompare=&quot;hiddenBalance&quot; ControlToValidate=&quot;txtPaymentAmount&quot;&gt;*&lt;/asp:CompareValidator&gt;</code>
</li>
</ol>
<p><a href="http://www.dotnetkicks.com/kick/?url=http://www.shepherdweb.com/2007/01/30/how-to-point-comparevalidators-controltocompare-attribute-at-a-hiddenfield/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.shepherdweb.com/2007/01/30/how-to-point-comparevalidators-controltocompare-attribute-at-a-hiddenfield/" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<div class="techtags"><p>Technorati Tags: <a href="http://technorati.com/tag/ASP.NET" rel="tag">ASP.NET</a>, <a href="http://technorati.com/tag/CompareValidator" rel="tag"> CompareValidator</a>, <a href="http://technorati.com/tag/ControlToCompare" rel="tag"> ControlToCompare</a></p></div>
]]></content:encoded>
			<wfw:commentRss>http://shepherdweb.com/2007/01/30/how-to-point-comparevalidators-controltocompare-attribute-at-a-hiddenfield/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Handling Google Maps API Keys with ASP.NET MasterPages and Web.config</title>
		<link>http://shepherdweb.com/2006/12/08/handling-google-maps-api-keys-with-aspnet-masterpages-and-webconfig/</link>
		<comments>http://shepherdweb.com/2006/12/08/handling-google-maps-api-keys-with-aspnet-masterpages-and-webconfig/#comments</comments>
		<pubDate>Fri, 08 Dec 2006 21:03:35 +0000</pubDate>
		<dc:creator>Shane</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#.NET]]></category>
		<category><![CDATA[technology & web]]></category>

		<guid isPermaLink="false">http://www.shepherdweb.com/2006/12/08/handling-google-maps-api-keys-with-aspnet-masterpages-and-webconfig/</guid>
		<description><![CDATA[The Google Maps API requires you to generate a key that is tied to the URL where the map will be deployed. This can be inconvenient if the site exists in multiple places at the same time&#8230;as is the case in many development scenarios: Develop Test Deploy These three stages can also represent physical locations. [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.google.com/apis/maps/">Google Maps API</a> requires you to generate a key that is tied to the URL where the map will be deployed.  This can be inconvenient if the site exists in multiple places at the same time&#8230;as is the case in many development scenarios:</p>
<ol>
<li>Develop</li>
<li>Test</li>
<li>Deploy</li>
</ol>
<p>These three stages can also represent physical locations.  Development is done locally, moved to an internal testing server for QA, and finally deployed to the production server.  There is frequently a lot of overlap between these stages and locations as bugs are discovered and ironed out or new features added.  Managing multiple Google Maps API Keys between all these URL&#8217;s can be a hassle.</p>
<h2>The Trick</h2>
<p><a href="http://www.google.com/apis/maps/signup.html">Sign up for the Google Maps API</a> for every URL the site will exist on.   Add the keys to the appSettings section of Web.config.<br />
<code class="block"><br />
  &lt;appSettings&gt;<br />
    &lt;!-- Google Map API Keys --&gt;<br />
    &lt;add key=&quot;localhost&quot; value=&quot;http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=ABQIAAAALZp8x8mYJMinyKDbF6G7bBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQBOooHv6EDaUJi3lHupS34T4CM5Q&quot;/&gt;<br />
    &lt;add key=&quot;testserver&quot; value=&quot;http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=ABQIAAAALZp8x8mYJMinyKDbF6G7bBT4S2onT7717RtVeZs20MVAELzRRBSlPqEN-WtDpPooS4i4Rvu50CucoA&quot;/&gt;<br />
    &lt;add key=&quot;www.productionserver.com&quot; value=&quot;http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=ABQIAAAALZp8x8mYJMinyKDbF6G7bBQzDH33YNyRzvKBWbxIa_7sg2mVwBRnO7qb_i1DY0Vhq-a8wXtFVXcMkg&quot;/&gt;<br />
  &lt;/appSettings&gt;<br />
</code></p>
<p>Now, register the script in the code behind for the page that needs it.</p>
<p><code class="block"><br />
protected void Page_Init(object sender, EventArgs e)<br />
{<br />
    if (!Page.IsStartupScriptRegistered(&quot;googleMapScript&quot;))<br />
    {<br />
        // Register Startup Script for Google Maps API<br />
        string myScript = &quot;&lt;script type=\&quot;text/javascript\&quot; src=\&quot;&quot; + ConfigurationManager.AppSettings[Request.ServerVariables[&quot;SERVER_NAME&quot;]] + &quot;\&quot;&gt;&lt;/script&gt;&quot;;<br />
        this.Page.ClientScript.RegisterStartupScript(typeof(Page), &quot;googleMapScript&quot;, myScript);<br />
    }<br />
}<br />
</code></p>
<p>You&#8217;re done!</p>
<p>PS: I know my code blocks are not too hip right now (overflowing onto the navigation and sidebar).  It&#8217;s on the list.</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http://www.shepherdweb.com/2006/12/08/handling-google-maps-api-keys-with-aspnet-masterpages-and-webconfig/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.shepherdweb.com/2006/12/08/handling-google-maps-api-keys-with-aspnet-masterpages-and-webconfig/" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<div class="techtags"><p>Technorati Tags: <a href="http://technorati.com/tag/Google+Map+API+Key" rel="tag">Google Map API Key</a>, <a href="http://technorati.com/tag/ASP.NET" rel="tag"> ASP.NET</a>, <a href="http://technorati.com/tag/RegisterStartupScript" rel="tag"> RegisterStartupScript</a></p></div>
]]></content:encoded>
			<wfw:commentRss>http://shepherdweb.com/2006/12/08/handling-google-maps-api-keys-with-aspnet-masterpages-and-webconfig/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Building and Implementing a Custom Atlas Extender with Visual Studio 2005</title>
		<link>http://shepherdweb.com/2006/08/24/building-and-implementing-a-custom-atlas-extender-with-visual-studio-2005/</link>
		<comments>http://shepherdweb.com/2006/08/24/building-and-implementing-a-custom-atlas-extender-with-visual-studio-2005/#comments</comments>
		<pubDate>Fri, 25 Aug 2006 01:15:38 +0000</pubDate>
		<dc:creator>Shane</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Atlas]]></category>
		<category><![CDATA[C#.NET]]></category>
		<category><![CDATA[technology & web]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.shepherdweb.com/2006/08/24/building-and-implementing-a-custom-atlas-extender-with-visual-studio-2005/</guid>
		<description><![CDATA[Pre-requisites: Atlas Framework Atlas Control Toolkit Summary The Atlas Control Toolkit site does a good job a walking through all the steps necessary to build a custom extender. You&#8217;ll want to refer to that site for more general detail. I&#8217;m going to show you my own custom implementation. I needed a control that would sum [...]]]></description>
			<content:encoded><![CDATA[<h2>Pre-requisites:</h2>
<ol>
<li><a href="http://atlas.asp.net/">Atlas Framework</a></li>
<li><a href="http://atlas.asp.net/default.aspx?tabid=47&#038;subtabid=477">Atlas Control Toolkit</a></li>
</ol>
<h2>Summary</h2>
<p>The Atlas Control Toolkit site does a good job a walking through all the steps necessary to build a <a href="http://atlas.asp.net/atlastoolkit/Walkthrough/CreatingNewExtender.aspx">custom extender</a>.  You&#8217;ll want to refer to that site for more general detail.  I&#8217;m going to show you my own custom implementation.</p>
<p>I needed a control that would sum all the TextBoxes on a page, using the <code>onchange</code> event, and display the answer in another TextBox.  For my purposes, the input is limited to integers, but it could easily be adapted to handle other numeric input.  I call my Atlas extender &#8220;SumTextboxes&#8221;.</p>
<h2>Getting Started</h2>
<p>Create a new project.  You can do this one of three ways:</p>
<ul>
<li>Go to <em>File->New Project&#8230;</em>;</li>
<li><kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>N</kbd>;</li>
<li>Right Click on a solution that is already open and select <em>Add->New Project&#8230;</em></li>
</ul>
<p><img src="/images/posts/20060824_AtlasTutorial/AddNewProject.jpg" width="550" height="333" alt="Add New Project Window"  /></p>
<p>All three methods will open up the <strong>Add New Project</strong> dialog.  Select your language preference (<acronym title="Visual Basic">VB</acronym> or C#) the <strong>&#8220;Atlas&#8221; Control Project</strong>.  The Atlas Control Project does not exist for any other languages right now.  Give your project a name and specify the location.</p>
<p><img src="/images/posts/20060824_AtlasTutorial/AddNewItem.jpg" width="550" height="315" alt="Add New Item Window"  /></p>
<p>Next, right click on your new project and select <em>Add->New Item&#8230;</em>.  This will open the <strong>Add New Item</strong> dialog.  Choose the <strong>&#8220;Atlas&#8221; Extender Control</strong> template, give it a name, and click <em>Add</em>.  Four files appear in your project.  These are the base files needed to build a custom extender.</p>
<p><img src="/images/posts/20060824_AtlasTutorial/NewItemFiles.jpg" width="254" height="153" alt="Atlas Extender Template Files"  /></p>
<h2>Write the Code</h2>
<p>Open all four of the template files and make the following changes:</p>
<dl>
<dt>SumTextboxesDesigner.cs</dt>
<dd>Change the word <code>Control</code> to the more specific <code>TextBox</code>.</dd>
<dt>SumTextboxesExtender.cs</dt>
<dd>Same thing: Change the word <code>Control</code> to the more specific <code>TextBox</code>.</dd>
<dt>SumTextboxesProperties.cs</dt>
<dd>Looks like this:<br />
<code class="block"><br />
    [DefaultProperty("TargetResultTextBoxID")]<br />
    public class SumTextboxesProperties : TargetControlPropertiesBase&lt;TextBox&gt;<br />
    {<br />
        // TODO: Add your property accessors here.<br />
        //<br />
        [IDReferenceProperty(typeof(TextBox))]<br />
        public string TargetResultTextBoxID<br />
        {<br />
            get<br />
            {<br />
                return GetPropertyStringValue("TargetResultTextBoxID");<br />
            }<br />
            set<br />
            {<br />
                SetPropertyStringValue("TargetResultTextBoxID", value);<br />
            }<br />
        }<br />
    }<br />
</code></p>
</dd>
<dt>SumTextboxesBehavior.js</dt>
<dd>First, initialize your property variable: <code>var _TargetResultTextBoxIDValue;</code>.  You can delete the <code>this._onkeyup</code> function; create a new function called <code>this._onchange</code>&#8230;we&#8217;ll get to the code for _onchange in a second.  Change the initialize function to look like this:<br />
<code class="block"><br />
    this.initialize = function() {<br />
        SumTextboxes.SumTextboxesBehavior.callBaseMethod(this, 'initialize');<br />
        // TODO: add your initalization code here<br />
        this.control.element.attachEvent('onchange', Function.createDelegate(this, this._onchange));<br />
        this._onchange();<br />
    }<br />
</code></p>
<p>You will also need to change the code inside <code>this.getDescriptor</code> to this:<br />
<code class="block">td.addProperty('TargetResultTextBoxID', String);</code></p>
<p>&#8230;and your property accessors:<br />
<code class="block"><br />
    // These are helper functions for communicating state back to the extender on the<br />
    // server side.  They take or return a custom string that is available in your initialize method<br />
    // and later.<br />
    //<br />
    this.getClientState = function() {<br />
        var value = SumTextboxes.SumTextboxesBehavior.callBaseMethod(this, 'get_ClientState');<br />
        if (value == '') value = null;<br />
        return value;<br />
    }<br />
  //<br />
    this.setClientState = function(value) {<br />
        return SumTextboxes.SumTextboxesBehavior.callBaseMethod(this, 'set_ClientState',[value]);<br />
    }<br />
</code></p>
<p>And finally, back to <code>this._onchange</code>.  This is where the meat of this extender is:<br />
<code class="block"><br />
    this._onchange = function() {<br />
        if (!document.getElementsByTagName)<br />
        {<br />
            return;<br />
        }<br />
        var e = document.getElementById(_TargetResultTextBoxIDValue);<br />
        var total = 0;<br />
        oTextboxes = new Array();<br />
        oInputs = document.getElementsByTagName('input');<br />
        for (i=0;i<oInputs.length;i++)<br />
        {<br />
            if (oInputs[i].type == 'text')<br />
            {<br />
                oTextboxes.push(oInputs[i]);<br />
            }<br />
        }<br />
        var msg = "Found " + oTextboxes.length + " text boxes";<br />
        for (i=0;i<oTextboxes.length;i++)<br />
        {<br />
            if (!isNaN(parseInt(oTextboxes[i].value)) &#038;&#038; oTextboxes[i] != e)<br />
            {<br />
                total += parseInt(oTextboxes[i].value);<br />
            }<br />
        }<br />
        e.value = total;<br />
    }<br />
</code> </p>
</dd>
</dl>
<p>You're almost done!  Save the project and build.  You can now use this extender in an ASP.NET website!  </p>
<h2>Implementation</h2>
<p><img src="/images/posts/20060824_AtlasTutorial/AddReference.jpg" width="481" height="392" alt="Add Reference Window"  /></p>
<p>Add a reference to SumTextboxes in the project by right clicking on the project and selection <em>Add Reference...</em>.  This will open the <strong>Add Reference</strong> dialog.  Select the <em>Projects</em> tab, the <em>SumTextboxes</em> project, and click OK.</p>
<p><img src="/images/posts/20060824_AtlasTutorial/Toolbar-ScriptManagerControl.jpg" width="192" height="280" alt="Toolbar - Atlas Script Manager Control"  /></p>
<p>Drag a ScriptManager control from your toolbar onto the design view.  This is control is required for Atlas enabled applications.</p>
<p><img src="/images/posts/20060824_AtlasTutorial/TextboxesScreenshot.jpg" width="360" height="240" alt="Textboxes Screenshot"  /></p>
<p>Add some TextBoxes to your page.  For each TextBox, you will also need a SumTextboxes control.  I chose to use another Atlas Extender, the <a href="http://atlas.asp.net/atlastoolkit/FilteredTextBox/FilteredTextBox.aspx">FilteredTextBoxExtender</a> to restrict the user input to numbers.  Here's a snippet of my code for each textbox:<br />
<code class="block"><br />
&lt;asp:Label ID=&quot;lblHundreds&quot; runat=&quot;server&quot; AssociatedControlID=&quot;txtHundreds&quot;&gt;Hundreds (100s):&lt;/asp:Label&gt;<br />
            &lt;cc2:FilteredTextBoxExtender ID=&quot;FilteredTextBoxExtender1&quot; runat=&quot;server&quot;&gt;<br />
                &lt;cc2:FilteredTextBoxProperties TargetControlID=&quot;txtHundreds&quot; FilterType=&quot;numbers&quot; /&gt;<br />
            &lt;/cc2:FilteredTextBoxExtender&gt;<br />
            &lt;cc3:SumTextboxesExtender ID=&quot;SumTextboxesExtender1&quot; runat=&quot;server&quot;&gt;<br />
                &lt;cc3:SumTextboxesProperties<br />
                    TargetControlID=&quot;txtHundreds&quot;<br />
                    TargetResultTextBoxID=&quot;txtTotal&quot; /&gt;<br />
            &lt;/cc3:SumTextboxesExtender&gt;<br />
            $&lt;asp:TextBox ID=&quot;txtHundreds&quot; runat=&quot;server&quot; Text=&quot;0&quot; /&gt;.00<br />
</code></p>
<p>Notice that the TargetResultTextBoxID property has been set to "txtTotal".  txtTotal is the TextBox control at the bottom of the page where the results are displayed.  It is updated everytime the user tabs off a field that has the SumTextboxes control attached to it! </p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http://www.shepherdweb.com/2006/08/24/building-and-implementing-a-custom-atlas-extender-with-visual-studio-2005/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.shepherdweb.com/2006/08/24/building-and-implementing-a-custom-atlas-extender-with-visual-studio-2005/" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<div class="techtags"><p>Technorati Tags: <a href="http://technorati.com/tag/atlas" rel="tag">atlas</a>, <a href="http://technorati.com/tag/atlas.net" rel="tag"> atlas.net</a>, <a href="http://technorati.com/tag/asp.net" rel="tag"> asp.net</a>, <a href="http://technorati.com/tag/visual+studio" rel="tag"> visual studio</a>, <a href="http://technorati.com/tag/atlas+extender" rel="tag"> atlas extender</a></p></div>
]]></content:encoded>
			<wfw:commentRss>http://shepherdweb.com/2006/08/24/building-and-implementing-a-custom-atlas-extender-with-visual-studio-2005/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Do you have Mono?</title>
		<link>http://shepherdweb.com/2006/04/09/do-you-have-mono/</link>
		<comments>http://shepherdweb.com/2006/04/09/do-you-have-mono/#comments</comments>
		<pubDate>Mon, 10 Apr 2006 00:04:31 +0000</pubDate>
		<dc:creator>Shane</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#.NET]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.shepherdweb.com/2006/04/09/do-you-have-mono/</guid>
		<description><![CDATA[Responding to a recent comment by farmerbob, I decided to investigate The Mono Project. According to the website&#8230; Mono provides the necessary software to develop and run .NET client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix. Excited about the prospect of building .NET applications on my Apple iMac, I went [...]]]></description>
			<content:encoded><![CDATA[<p>Responding to a <a href="http://www.shepherdweb.com/2006/03/06/visual-studio-2005-apple-imac-continued/#comment-78">recent comment</a> by <a href="http://gearslips.net/">farmerbob</a>, I decided to  investigate <a href="http://www.mono-project.com/">The Mono Project</a>.   According to the website&#8230;</p>
<blockquote cite="http://www.mono-project.com/Main_Page">
<p>Mono provides the necessary software to develop and run .NET client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix.</p>
</blockquote>
<p>Excited about the prospect of building .NET applications on my Apple iMac, I went straight for a link labeled &#8220;Multi-platform&#8221;, and then clicked on &#8220;Mac OS X&#8221;</p>
<p>I downloaded the Mac .dmg and then read the steps involved with <a href="http://www.mono-project.com/Mono:OSX">installation and use</a>.  In addition to the framework, there were an additional six installs to perform to get the development environment up and running.  The steps looked pretty scary and I decided not to jump in with both feet without a little more research.</p>
<p>After a little more looking around it appears that Mono is geared more towards Linux application development.  I can&#8217;t tell if it would be useful for web development or not.  I don&#8217;t need another framework to learn, but I think it would be cool (in a super geeky kind of way) to be able to develop .NET apps on my Mac.  Is anyone else doing this?</p>
<div class="techtags"><p>Technorati Tags: <a href="http://technorati.com/tag/Mono" rel="tag">Mono</a>, <a href="http://technorati.com/tag/Mono-Project" rel="tag"> Mono-Project</a>, <a href="http://technorati.com/tag/.NET" rel="tag"> .NET</a>, <a href="http://technorati.com/tag/Apple" rel="tag"> Apple</a></p></div>
]]></content:encoded>
			<wfw:commentRss>http://shepherdweb.com/2006/04/09/do-you-have-mono/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

