<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.dotnetdude.net/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-107486965713406362</atom:id><lastBuildDate>Thu, 16 May 2013 11:25:36 +0000</lastBuildDate><category>devlink</category><category>ignite</category><category>Visual Studio</category><category>xaml</category><category>hewlett packard</category><category>MVVM</category><category>hdx18</category><category>justmock</category><category>garymccaffrey</category><category>recruiting</category><category>development</category><category>dotnetnuke</category><category>xunit</category><category>moles</category><category>community</category><category>selenium</category><category>oracle data access components</category><category>nunit</category><category>occupy</category><category>presentation</category><category>e-book</category><category>nmock</category><category>firefox</category><category>game development</category><category>moq</category><category>css</category><category>audio book</category><category>mocking</category><category>easymock.net</category><category>fakeiteasy</category><category>microsoft tag</category><category>AmplifyJS</category><category>development training</category><category>craigslist</category><category>tweetergetter</category><category>MMO</category><category>greasemonkey</category><category>WinForms</category><category>generic repository</category><category>training</category><category>asp.net mvc</category><category>barcode</category><category>fraud</category><category>resharper</category><category>LINQ</category><category>kindle review</category><category>bikerevents.net</category><category>typemock isolator</category><category>occupy nashville</category><category>nopcommerce</category><category>htc ppc-6800</category><category>conversion operators</category><category>microsoft fakes</category><category>css3</category><category>MVP</category><category>fakes</category><category>msunit</category><category>home improvement</category><category>xna</category><category>web developer</category><category>Travian</category><category>IIS</category><category>gaming</category><category>Caliburn.Micro</category><category>mvc</category><category>Windows Phone 7</category><category>palm pre</category><category>interview</category><category>EF4</category><category>automapper</category><category>nashville</category><category>pyramid</category><category>html</category><category>Sync Framework</category><category>xbox 360</category><category>unit testing</category><category>asp.net</category><category>odac</category><category>mp3</category><category>Give Camp</category><category>vibrant media</category><category>monetize</category><category>testing</category><category>ereader</category><category>service bus</category><category>error</category><category>Entity Framework</category><category>xbox live</category><category>microsoft mvc</category><category>javascript</category><category>sprintmogul.net</category><category>advertising</category><category>ponzi</category><category>conference</category><category>demo</category><category>SOA</category><category>ebook</category><category>Windows Phone</category><category>tinychat</category><category>protest</category><category>bing</category><category>VS2012</category><category>.net user group</category><category>browser</category><category>consulting</category><category>ecommerce</category><category>Code PaLOUsa</category><category>e-reader</category><category>Microsoft Moles</category><category>HTML5</category><category>silverlight desktop</category><category>Knockout.js</category><category>dependency injection</category><category>sprint pre</category><category>watin</category><category>speaking</category><category>silverlight</category><category>zune</category><category>ajax</category><category>politics</category><category>sprint mogul</category><category>Bank of America</category><category>cpl12</category><category>Disconnected Service Agent</category><category>entrepreneurship</category><category>FubuMVC</category><category>business cards</category><category>commission junction</category><category>bar code</category><category>Synergy Systems</category><category>kindle</category><category>board games</category><category>pex</category><category>jquery</category><category>biker events</category><category>SEO</category><category>amazon kindle</category><category>blind search</category><category>WCF</category><category>testdriven.net</category><category>adsense</category><category>twitter</category><category>razor</category><category>microsoft</category><category>dotcover</category><category>Star Wars</category><category>overdraft</category><category>nsubstitute</category><category>self improvement</category><category>WPF</category><category>mbunit</category><category>e-commerce</category><title>The DotNetDude Blog</title><description>Topics of interest to .NET software and website developers.</description><link>http://blog.dotnetdude.net/</link><managingEditor>noreply@blogger.com (Gaines Kergosien)</managingEditor><generator>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.dotnetdude.net/DotNetDude" /><feedburner:info uri="dotnetdude" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-7102256028187548736</guid><pubDate>Wed, 06 Mar 2013 09:35:00 +0000</pubDate><atom:updated>2013-03-06T12:34:47.577-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">conversion operators</category><category domain="http://www.blogger.com/atom/ns#">development</category><title>Conversion Operators Pros and Cons</title><description>&lt;a href="http://3.bp.blogspot.com/-E53Jb9sqCeI/UTcMkfzeMJI/AAAAAAAABjI/AX3HoxhVJeU/s1600/convert.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-E53Jb9sqCeI/UTcMkfzeMJI/AAAAAAAABjI/AX3HoxhVJeU/s1600/convert.gif" /&gt;&lt;/a&gt;C# enables programmers to declare conversions on classes so they can be converted to and/or from other types. These conversions can be explicit or implicit.&lt;br /&gt;
&lt;br /&gt;
Below is an example from&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/vstudio/09479473.aspx" target="_blank"&gt;Microsoft&lt;/a&gt;:&lt;br /&gt;
&lt;pre style="font-family: Consolas, Courier, monospace; font-size: 12px; line-height: 16px; overflow: auto; padding: 5px;"&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; SampleClass
{
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;explicit&lt;/span&gt; &lt;span style="color: blue;"&gt;operator&lt;/span&gt; SampleClass(&lt;span style="color: blue;"&gt;int&lt;/span&gt; i)
    {
        SampleClass temp = &lt;span style="color: blue;"&gt;new&lt;/span&gt; SampleClass();
        &lt;span style="color: green;"&gt;// code to convert from int to SampleClass...&lt;/span&gt;

        &lt;span style="color: blue;"&gt;return&lt;/span&gt; temp;
    }
}&lt;/pre&gt;
Conversion operators are a great way of simplifying business logic, however they have some important limitations. One of these is that the operator may only have one parameter (the source type). This means that the only values available when the target type is initialized are those provided by the source type and&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Dependency_injection" target="_blank"&gt;dependency injection&lt;/a&gt;&amp;nbsp;cannot be used. It's also worth noting that these conversions will not chain automatically. Declaring conversions from A-&amp;gt;B and B-&amp;gt;C does not provide a way to directly convert A-&amp;gt;C.&lt;br /&gt;
&lt;br /&gt;
This is all fine in theory, but what I find useful in these types of articles are real world examples, so here it is.&lt;br /&gt;
&lt;br /&gt;
We're using Microsoft Service Bus for Windows to pass events between an e-commerce solution based on nopCommerce and a custom back office application. We needed some basic objects to pass relevant information through the bus and did not want to be too tightly coupled to the nopCommerce domain objects. My initial solution was to create classes and implement conversion operators to cast objects from nopCommerce to their POCO counterparts.&lt;br /&gt;
&lt;br /&gt;
In the example below, you can see an implicit conversion operator for the Order class which uses the Shipment conversion operator.&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;pre style="font-family: Consolas, Courier, monospace; font-size: 12px; line-height: 16px; overflow: auto; padding: 5px;"&gt;&lt;span style="background-color: white; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; implicit &lt;span style="color: blue;"&gt;operator&lt;/span&gt; Order(&lt;span style="color: blue;"&gt;Core.Domain.Orders.Order&lt;/span&gt; o)
{
  &lt;span style="color: blue;"&gt;return &lt;/span&gt;new &lt;span style="color: blue;"&gt;Order&lt;/span&gt;
  {
&lt;/span&gt;    OrderId = o.Id,
    Shipments = o.Shipments.Select(x =&amp;gt; (Shipment)x)
  };
}&lt;/pre&gt;
&lt;/div&gt;
Since we needed to add more information to our Order object than was contained in the version from nopCommerce, I got rid of the conversion operator and created a separate conversion class with the following method:&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;pre style="font-family: Consolas, Courier, monospace; font-size: 12px; line-height: 16px; overflow: auto; padding: 5px;"&gt;&lt;span style="background-color: white; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;Order&lt;/span&gt; ToOrder(&lt;span style="color: blue;"&gt;Core.Domain.Orders.Order&lt;/span&gt; o)
{
  &lt;span style="color: blue;"&gt;return &lt;/span&gt;new &lt;span style="color: blue;"&gt;Order&lt;/span&gt;
  {
    OrderId = o.Id,
    Shipments = o.Shipments.Select(ToShipment).ToList()
&lt;/span&gt;  };
}&lt;/pre&gt;
&lt;div&gt;
The method contents are nearly identical, however we are now free to inject any dependencies we like in the conversion class constructor and add parameters to the conversion method.&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
No matter which approach you choose, these are excellent ways to simplify conversion and consolidate code used for creating related types. If you have any suggestions or feedback on this article, please leave a comment below or &lt;a href="/p/contact.html" target="_blank"&gt;contact me directly&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/KyL5DOlOn18" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/KyL5DOlOn18/conversion-operators-pros-and-cons.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-E53Jb9sqCeI/UTcMkfzeMJI/AAAAAAAABjI/AX3HoxhVJeU/s72-c/convert.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2013/03/conversion-operators-pros-and-cons.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-7691093558848956965</guid><pubDate>Wed, 13 Feb 2013 21:26:00 +0000</pubDate><atom:updated>2013-02-13T15:26:10.912-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">service bus</category><category domain="http://www.blogger.com/atom/ns#">error</category><title>Specified RunAs Account is Invalid</title><description>Windows Service Bus Configuration requires a "RunAs" service account which seems like it should be a fairly simple requirement. Unfortunately, if the configuration does not like the user you've entered it displays the generic error message, "Specified RunAs account is invalid." without providing any indication of the problem.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-dag42adyHnA/URwBmboR-MI/AAAAAAAABZw/cMNbNxxXPD8/s1600/ServiceAccount.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-dag42adyHnA/URwBmboR-MI/AAAAAAAABZw/cMNbNxxXPD8/s1600/ServiceAccount.JPG" /&gt;&lt;/a&gt;In my case, the service account was fine. The problem was that I logged in with a local administrator account and was trying to use a domain service account, which is not supported. Once I figured out the issue and logged in with a domain account the error went away.&lt;br /&gt;
&lt;br /&gt;
Below are the supported combinations:&lt;br /&gt;
&lt;br /&gt;
&lt;table style="background-color: white; border-collapse: collapse; color: #666666; font-family: 'Segoe UI', Helvetica, Garuda, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding-bottom: 20px; padding-top: 20px; width: 598px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th style="background-color: #ededed; border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #707070; margin: 10px; padding: 10px 8px;"&gt;Environment&lt;/th&gt;&lt;th style="background-color: #ededed; border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #707070; margin: 10px; padding: 10px 8px;"&gt;Logged In Account&lt;/th&gt;&lt;th style="background-color: #ededed; border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #707070; margin: 10px; padding: 10px 8px;"&gt;RunAs Account&lt;/th&gt;&lt;th style="background-color: #ededed; border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #707070; margin: 10px; padding: 10px 8px;"&gt;Support&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Supported&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Local&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Not supported.&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Local&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Not supported.&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Local&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Local&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Either in development environment (1-box) or by using SQL Authentication.&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Workgroup&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Not supported.&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Workgroup&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Local&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Not supported.&lt;/div&gt;
&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Not possible.&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Workgroup&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Local&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Domain&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Not supported.&lt;/div&gt;
&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Not possible.&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Workgroup&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Local&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Local&lt;/div&gt;
&lt;/td&gt;&lt;td style="border-bottom-color: rgb(219, 219, 219); border-bottom-style: solid; border-bottom-width: 1px; color: #2a2a2a; margin: 10px; padding: 10px 8px; vertical-align: top;"&gt;&lt;div style="line-height: 18px; padding-bottom: 0px;"&gt;
Either in development environment (1-box) or by using SQL Authentication.&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Hopefully this article will save someone else the headache of wondering why their service account is considered "invalid".&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/-SVdatZ4cAw" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/-SVdatZ4cAw/specified-runas-account-is-invalid.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-dag42adyHnA/URwBmboR-MI/AAAAAAAABZw/cMNbNxxXPD8/s72-c/ServiceAccount.JPG" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2013/02/specified-runas-account-is-invalid.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-5019357157495477373</guid><pubDate>Fri, 08 Feb 2013 00:39:00 +0000</pubDate><atom:updated>2013-02-07T19:27:33.460-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SOA</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">dependency injection</category><category domain="http://www.blogger.com/atom/ns#">EF4</category><category domain="http://www.blogger.com/atom/ns#">mvc</category><category domain="http://www.blogger.com/atom/ns#">speaking</category><category domain="http://www.blogger.com/atom/ns#">presentation</category><category domain="http://www.blogger.com/atom/ns#">generic repository</category><category domain="http://www.blogger.com/atom/ns#">e-commerce</category><category domain="http://www.blogger.com/atom/ns#">jquery</category><category domain="http://www.blogger.com/atom/ns#">ecommerce</category><category domain="http://www.blogger.com/atom/ns#">asp.net mvc</category><category domain="http://www.blogger.com/atom/ns#">LINQ</category><category domain="http://www.blogger.com/atom/ns#">microsoft</category><category domain="http://www.blogger.com/atom/ns#">microsoft mvc</category><category domain="http://www.blogger.com/atom/ns#">WCF</category><category domain="http://www.blogger.com/atom/ns#">razor</category><category domain="http://www.blogger.com/atom/ns#">nopcommerce</category><category domain="http://www.blogger.com/atom/ns#">automapper</category><title>Building E-commerce Sites with MVC</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-y6sWj6YX5pE/URRI7sIW6RI/AAAAAAAABXo/xtPeZj3zy40/s1600/Shopping-Cart-Button.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="142" src="http://4.bp.blogspot.com/-y6sWj6YX5pE/URRI7sIW6RI/AAAAAAAABXo/xtPeZj3zy40/s200/Shopping-Cart-Button.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
For those of us who have spent most of our careers building business applications, the prospect of creating an e-commerce storefront can be quite daunting. Not only do you have to deal with calculating tax, estimating shipping and accepting payments, but employees need a way to manage products, discounts and marketing content. Thankfully, there's an open source e-commerce solution written in &lt;a href="http://www.asp.net/mvc" target="_blank"&gt;Microsoft ASP.NET MVC&lt;/a&gt; named &lt;a href="http://www.nopcommerce.com/" target="_blank"&gt;nopCommerce&lt;/a&gt; that provides all this functionality and much more.&lt;br /&gt;
&lt;br /&gt;
I was so impressed by both the functionality and the underlying architecture that I've created a presentation which I believe will serve as a great introduction to MVC as well as a tutorial on developing custom storefronts using nopCommerce.&lt;br /&gt;
&lt;br /&gt;
We start off with a brief overview of basic MVC concepts accompanied by examples within the nopCommerce code. This includes strongly typed &lt;a href="http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3razor.aspx" target="_blank"&gt;Razor&lt;/a&gt; views, HTML helpers, &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt; ajax calls, and&amp;nbsp;&lt;a href="http://fluentvalidation.codeplex.com/" target="_blank"&gt;fluent validation&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Once everyone understands how the website works, we dive into the infrastructure by introducing &lt;a href="http://msdn.microsoft.com/en-us/library/dd456779.aspx" target="_blank"&gt;WCF&lt;/a&gt;&amp;nbsp;services, using a generic repository with &lt;a href="http://msdn.microsoft.com/en-us/data/ef.aspx" target="_blank"&gt;Entity Framework&lt;/a&gt; (EF4) and &lt;a href="http://msdn.microsoft.com/en-us/library/vstudio/bb397926.aspx" target="_blank"&gt;LINQ&lt;/a&gt;, as well as Dependency Injection (DI) with &lt;a href="http://automapper.org/" target="_blank"&gt;Automapper&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you'd like to schedule this talk for your local user group, either &lt;a href="http://ineta.org/Speakers/SearchCommunitySpeakers.aspx?SpeakerId=2c018e3e-b3ac-482a-b1a6-0b1f7b2ccf01" target="_blank"&gt;request me through INETA&lt;/a&gt; or &lt;a href="http://blog.dotnetdude.net/p/contact.html" target="_blank"&gt;contact me directly&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/GNHWHzEo67w" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/GNHWHzEo67w/building-e-commerce-sites-with-mvc.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-y6sWj6YX5pE/URRI7sIW6RI/AAAAAAAABXo/xtPeZj3zy40/s72-c/Shopping-Cart-Button.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2013/02/building-e-commerce-sites-with-mvc.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-2606703404868938678</guid><pubDate>Wed, 19 Dec 2012 12:17:00 +0000</pubDate><atom:updated>2012-12-19T06:19:17.022-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Synergy Systems</category><title>DotNetDude joins Synergy Systems</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://seriousaboutrecruiting.com/wp-content/themes/synergy/style/images/logo.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://seriousaboutrecruiting.com/wp-content/themes/synergy/style/images/logo.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
I'm pleased to announce that DotNetDude Development and Synergy Systems have joined forces with big plans for 2013.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Synergy Systems has established itself as a leader in recruiting by focusing on the most sought-after talent with a critical eye towards both technical and soft skills. The folks at Synergy pride themselves in establishing relationships with the upper echelon of IT talent as well as the most&amp;nbsp;desirable&amp;nbsp;companies.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
DotNetDude Development has invested heavily in the IT community and Synergy Systems is helping to continue this push in the new year by sponsoring appearances at technical conferences. Be on the lookout for me at CodeMash in January!&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/ygH80Kya46Y" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/ygH80Kya46Y/dotnetdude-joins-synergy-systems.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>1</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/12/dotnetdude-joins-synergy-systems.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-6684386781918210438</guid><pubDate>Thu, 22 Nov 2012 08:33:00 +0000</pubDate><atom:updated>2013-02-07T18:16:07.256-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Microsoft Moles</category><category domain="http://www.blogger.com/atom/ns#">VS2012</category><category domain="http://www.blogger.com/atom/ns#">microsoft fakes</category><category domain="http://www.blogger.com/atom/ns#">fakes</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">moles</category><category domain="http://www.blogger.com/atom/ns#">microsoft</category><title>Microsoft Fakes Bait and Switch?</title><description>&lt;div&gt;
Is it possible Microsoft tricked developers into adopting their code isolation framework in an attempt to force upgrades to the Ultimate version of Visual Studio 2012?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
When I first learned about the Moles framework from Microsoft Research, I was excited at the possibilities for unit testing and began &lt;a href="http://blog.dotnetdude.net/2012/02/microsoft-pex-and-moles.html" target="_blank"&gt;presenting it at user groups and conferences&lt;/a&gt;. I was even more excited after Microsoft announced that&amp;nbsp;&lt;a href="http://blog.dotnetdude.net/2012/05/testing-untestable-with-vs11-fakes.html" target="_blank"&gt;a new version of this framework, named Fakes, would be included with Visual Studio 11&lt;/a&gt; (now 2012).&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Microsoft's documentation originally indicated that Fakes would be included with both Premium and Ultimate, but early adopters noticed &lt;a href="http://connect.microsoft.com/VisualStudio/feedback/details/746742/fakes-framework-is-not-available-in-vs12-premium" target="_blank"&gt;the VS2012 Premium release candidate did not include Fakes&lt;/a&gt; and the documentation was later updated to indicate it would only ship with Ultimate.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Meanwhile, Moles is no&amp;nbsp;longer supported in VS2012.&amp;nbsp;So where does this leave those who adopted Moles and use the Premium version of Visual Studio? It appears they will be forced to upgrade to Ultimate or abandon the use of Microsoft's code isolation framework.&lt;br /&gt;
&lt;br /&gt;
I choose to give Microsoft the benefit of the doubt. I'm sure the original intention was to ship Fakes with the same versions as were previously compatible with Moles. Discontinuing Moles made sense when a new-and-improved framework was slated to take it's place. The decision to restrict the use of Fakes to Ultimate was surely made without considering the ramifications to their existing customers.&lt;br /&gt;
&lt;br /&gt;
The question remains of what, if anything, Microsoft will do to address the needs of those customers that have been left out in the cold.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/AVBLtCsgvuM" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/AVBLtCsgvuM/microsoft-fakes-bait-and-switch.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/11/microsoft-fakes-bait-and-switch.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-6283915068834400042</guid><pubDate>Tue, 23 Oct 2012 20:32:00 +0000</pubDate><atom:updated>2012-10-23T16:20:48.750-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">community</category><category domain="http://www.blogger.com/atom/ns#">recruiting</category><title>Three Tips for Recruiters</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://farm3.staticflickr.com/2709/4416036998_a05e57e883_m.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="240" src="http://farm3.staticflickr.com/2709/4416036998_a05e57e883_m.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;The longer I work in the software development community, the more recognition I get from recruiters as someone who can help them find candidates and the more colleagues that approach me asking for career advice. I love helping good people on both sides of the equation, but there are a few things I expect from recruiters.&lt;/b&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;b&gt;Be Candid&lt;/b&gt;&lt;/h3&gt;
When I speak with a recruiter who is unwilling to share information about the client for fear they will be circumvented or will not provide a general range for the salary/rate, it says to me that they do not trust their own value and consider the candidate an adversary.&lt;br /&gt;
&lt;br /&gt;
Experienced recruiters bring more to the table than a job description. They, or someone they work with, have a relationship with the client company and a&amp;nbsp;reputation&amp;nbsp;of bringing them solid candidates. A resume presented by such a recruiter may be given more credibility and often goes to the top of the interview list.&lt;br /&gt;
&lt;br /&gt;
In my experience, providing a general range of possible compensation for a position is a win-win. It gives a potential candidate the information they need to decide if the opportunity is worth pursuing and keeps from wasting anyone's time.&lt;br /&gt;
&lt;h3&gt;
Avoid Random Referral&amp;nbsp;Solicitation&lt;/h3&gt;
I can't count how many times some random recruiter has asked me to help them expand their network by recommending them to my colleagues or, even worse, asked for me to give them contact information for possible candidates. There is a short list of recruiters which I provide when someone I know is looking for a gig and these are people who I've known for years and have a solid reputation for taking care of their candidates. It baffles me that someone would expect me to recommend them when I cannot vouch for their character and abilities.&lt;br /&gt;
&lt;br /&gt;
That said, I encourage recruiters to email me job openings that fit my niche as I may come across someone who would be a good fit. While I appreciate having these on hand in case a colleague expresses a need, I do not actively seek candidates for these positions unless there is significant motivation for me to do so. Motivation comes in many forms, but the most straightforward is a referral fee. If a recruiter who I do not have a relationship with expects someone else to spend time and energy helping them fill a position, they should expect to offer compensation in the same way that I would share part of my billable rate should I need help from another software developer who is not getting paid for the work.&lt;br /&gt;
&lt;h3&gt;
Get Involved&lt;/h3&gt;
Having served as Treasurer, Vice President, President and now Board Member for the Nashville .NET User Group, I often encourage others to drop by and find a way to participate in the community. It can be an important tool for software developers, but is absolutely vital for a recruiter.&lt;br /&gt;
&lt;br /&gt;
Imagine taking all the juiciest most healthy fish in a lake and putting them in a swimming pool. Wouldn't that be a great opportunity for a fisherman to make a great catch? User group meetings are where the best and brightest gather and recruiters are welcome at most of them, so long as they respect the meeting and are not overbearing. Even if the recruiter doesn't speak to anyone about opportunities during the meeting, they have a connection to reference next time they call.&lt;br /&gt;
&lt;br /&gt;
Attending community events is not just about networking. The bulk of a technical presentation might be over a recruiter's head, but over time they can pick up meaning behind the buzz words and witness individual and group reactions. Understanding these reactions can help identify the right candidates for a position and what motivations particular candidates might respond to.&lt;br /&gt;
&lt;br /&gt;
There's a wealth of non-technical education that takes place as well. By watching how people interact one can learn quickly who people in the community respect and how they interact. Seeing how someone interacts with their peers can be a great indicator for how they might fit into a team.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Chances are, any recruiters who are taking the time to read this article are already on the right path. Hopefully these tips will help provide direction to someone I will, one day, have the pleasure of working with.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;If you have any additional tips or thoughts on this topic, please feel free to leave a comment below.&lt;/b&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/gADsFkWFjXc" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/gADsFkWFjXc/three-tips-for-recruiters.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>6</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/10/three-tips-for-recruiters.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-8957590915594663084</guid><pubDate>Mon, 08 Oct 2012 14:47:00 +0000</pubDate><atom:updated>2012-10-09T09:58:59.613-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">overdraft</category><category domain="http://www.blogger.com/atom/ns#">fraud</category><category domain="http://www.blogger.com/atom/ns#">Bank of America</category><title>Bank of America's $888,888.88 Surprise</title><description>&lt;div&gt;
If you have a Bank of America checking account, you could find yourself nearly a million dollars in debt as a result of depositing a check that bounces.&lt;br /&gt;
&lt;br /&gt;
I've been a Bank of America customer since 1998 and have never had a problem with my checking account until last week when I noticed an $888,888.88&amp;nbsp;withdrawal&amp;nbsp;appear. As a software developer, my first thought was some sort of system error so I searched the internet to see how many other people had experienced similar glitches, but I seemed to be the only one. Then I started to worry that it was fraud so I contacted customer support. They transferred me to Sheldon Walker in the Global Fraud Prevention department where I was informed that they had applied this charge to prevent me from using my account. Their justification was that a check from my renter had bounced leaving insufficient funds, so to ensure that the bounced check was re-payed they deducted nearly a million dollars from my checking account. Sheldon gave me his direct number (626-397-6029) and told me he would have to be contacted to remove the hold once my account had sufficient funds to cover the bounced check.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-5E3ZjV9rlHw/UHLlcITkX9I/AAAAAAAAA8o/UU4cihW_Nm4/s1600/boa.JPG" imageanchor="1"&gt;&lt;img border="0" height="185" src="http://3.bp.blogspot.com/-5E3ZjV9rlHw/UHLlcITkX9I/AAAAAAAAA8o/UU4cihW_Nm4/s400/boa.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
I knew my client's next invoice was being processed Thursday night so I waited until the funds were deposited and called Sheldon first thing Friday morning. I left a&amp;nbsp;voice mail&amp;nbsp;message that the funds had been added and I needed the fake charge removed. With the weekend fast approaching I called back every hour leaving a new message, but Sheldon never returned my call.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I've never heard of a bank purposefully creating fake&amp;nbsp;withdrawals&amp;nbsp;of arbitrary amounts and can't fathom why they didn't place a hold for the amount of the bounced check. It all seems quite unprofessional and makes me think I need to find a bank that will take better care of their account holders.&lt;br /&gt;
&lt;br /&gt;
Apparently I'm not alone. Here are others who have gone through the same nightmare including a TV news story:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.easymoney-ebooks.com/bank-reported-me-to-chexsystems-as-fraud" target="_blank"&gt;Bank reported me to ChexSystems as fraud!!!?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.fox4now.com/news/local/169567766.html"&gt;Bank claims bus driver owes them $888K on account&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://volcanicensemble.blogspot.com/2006/12/bank-of-america-u-haul-of-banks.html" target="_blank"&gt;Bank of America: The U-Haul of Banks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://praetorianprefect.com/archives/2009/10/good-morning-you-owe-use-887180-dollars-and-48-cents/" target="_blank"&gt;Good morning, you owe us $887,180 dollars and 48 cents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://boawherebankingisdisastrous.blogspot.com/2011/12/bank-of-america-put-fictitious-debit.html" target="_blank"&gt;Bank of America Put Fictitious Debit $888,888.88 on My Accounts and Seize All Account Holdings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://eon.businesswire.com/news/eon/20110519006979/en" target="_blank"&gt;Orbital Publishing Obtains Federal Court Injunction Preventing Bank of America from Seizing Bank Accounts and Falsely Debiting Accounts $888,888.88&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.reddit.com/r/AskReddit/related/9i8p2/bank_of_america_just_withdrew_88888888_from_my/" target="_blank"&gt;Bank of America just withdrew $888,888.88 from my account, because they suspect me of fraud. Apparently that's their "normal" way of handling suspicious accounts. They won't talk to me, or give me any further information. Advice? Help me fight this!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/I4qsB5gYxPw" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;UPDATE 10/09/2012:&lt;/b&gt;&lt;br /&gt;
I received an email notification this morning that my Savings account balance had dropped to $0. When I logged into online banking I found that Bank of America had drained my savings account as "OVERDRAFT TRANSFER HOLD". I tried one last time to reach Sheldon Walker, the employee to whom I first spoke with regarding the hold, but my call went to voicemail so I decided to try another route.&lt;br /&gt;
&lt;br /&gt;
I then called BoA Risk Management (877-240-6886 option 2) and was transferred to someone who was able to remove the -$888,888.88 entry. They were very apologetic and, after a few minutes on hold, informed me that they had removed the extra fees that had been added as a result of the hold. I can verify that my account now shows no trace of the $888k entry and I'm back to black. The savings transfer hold and overdraft fees still show up, but I'll give those a while to clear before calling back.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;FINAL THOUGHTS:&lt;/b&gt;&lt;br /&gt;
I'm happy to have my account back, however this whole experience has shaken any faith I had in Bank of America as a safe place for my money. Because one deposited check bounced, I lost access to my account for nearly a week and watched my savings siphoned off into a black hole of fake transactions. If not for my own persistence, this would have surely gone on much longer as nobody from Bank of America ever initiated contact with me. I had to investigate the cause for the mysterious charge and hunt down someone who could rectify the situation. There's no excuse for a bank hanging a customer out to dry like that with no indication of the cause or what needs to be done.&lt;br /&gt;
&lt;br /&gt;
Time after time, Bank of America makes it clear that the customer is NOT their priority so I'll be moving my personal checking, savings, and business accounts as soon as I can decide on a new home for my money.&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/C4F7UNcu7ww" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/C4F7UNcu7ww/bank-of-americas-million-dollar.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-5E3ZjV9rlHw/UHLlcITkX9I/AAAAAAAAA8o/UU4cihW_Nm4/s72-c/boa.JPG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/10/bank-of-americas-million-dollar.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-3667292957263476032</guid><pubDate>Fri, 28 Sep 2012 15:55:00 +0000</pubDate><atom:updated>2012-09-28T10:55:18.509-05:00</atom:updated><title>Conference Survival Guide</title><description>&lt;img align="right" border="0" src="http://www.barcampnashville.org/bcn12/sites/all/themes/responsivebase/img/logo.png" /&gt;
The fine folks running &lt;a href="http://www.barcampnashville.org/" target="_blank"&gt;Bar Camp Nashville&lt;/a&gt; asked me to write a short guide to help attendees get the most out of their un-conference experience.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;General Tips&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Plan Your Schedule&lt;/b&gt; - Note which sessions you want to attend in advance. Choose backup sessions in case your first choice gets rescheduled or canceled.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Dress Comfortably&lt;/b&gt; - It's hard to concentrate on the speaker if your feet are hurting.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Bring a Bag&lt;/b&gt; - The conference might provide one, but then it's going to look just like everyone else's and you run the risk of losing it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Take Breaks&lt;/b&gt; - All those sessions can get overwhelming. Don't be afraid to take a break to digest and discuss what you've heard with others.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Don't Be a Loner&lt;/b&gt; - Meals are great networking opportunities and you can usually find at least one other person who is hungry and would enjoy the company.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Be a Loner&lt;/b&gt; - Don't spend the whole conference around the same people, especially coworkers or friends who you see regularly. By striking out on your own you may meet people you otherwise wouldn't.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Eat Left Handed&lt;/b&gt; - There's no telling what kind of germs you've accumulated by shaking hands, not to mention all the door knobs and railings. Wash your hands regularly, use sanitizer and try not to touch your face or handle food with your dominant hand.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Use Twitter&lt;/b&gt; - Even if you never post a single tweet, Twitter is a great way to find out what's going on and connect with people. Search for the conference name, hash tag or influencers to see what people are up to.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Write on Business Cards&lt;/b&gt; - When handing out or receiving a business card, flip it over and write a short note on the back to help later with recalling what was being discussed.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Follow Up with Contacts&lt;/b&gt; - Don't just throw all those business cards in a drawer when you get home. Take a moment to write follow-up emails and enter their contact information into your address book.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Session Tips&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Taking Notes&lt;/b&gt; - Write down reminders for yourself when you hear/see something you want to look at more closely later. Ask if the presenter will be posting their slides. If not, use your phone's camera to take snapshots of important slides.&amp;nbsp;If so, then there's no need to copy them down and you can focus on what the presenter is saying.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ask Questions&lt;/b&gt; - Unless the presenter has asked to hold questions until then end, don't be afraid to speak up. Chances are, someone else in that room has the same question and is afraid to ask.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Use the Two Foot Rule&lt;/b&gt; - If you're not getting something out of the presentation, don't be afraid to use your two feet and walk out to try another session or just socialize.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Following Up&lt;/b&gt;&amp;nbsp;- Most presenters will share their email address or twitter handle as a way of contacting them with questions. Take advantage of their offer to start a dialog.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Do Something&lt;/b&gt; - Find a way to use what you've learned in the session. Teaching it to others is a great way to be sure you understand and will retain your&amp;nbsp;new-found&amp;nbsp;knowledge.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/-nP4BupNvuA" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/-nP4BupNvuA/conference-survival-guide.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/09/conference-survival-guide.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-1380998270707344632</guid><pubDate>Mon, 24 Sep 2012 17:18:00 +0000</pubDate><atom:updated>2012-10-01T13:42:50.349-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">VS2012</category><category domain="http://www.blogger.com/atom/ns#">fakes</category><category domain="http://www.blogger.com/atom/ns#">testing</category><category domain="http://www.blogger.com/atom/ns#">speaking</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">mocking</category><category domain="http://www.blogger.com/atom/ns#">microsoft</category><title>Memphis .NET User Group (MNUG)</title><description>Last week I mentioned that I'll be speaking at the &lt;a href="http://blog.dotnetdude.net/2012/09/ne-arkansas-net-user-group.html" target="_blank"&gt;NE Arkansas .NET User Group on the 27th&lt;/a&gt;. Since then, we've arranged for that presentation to be broadcast via &lt;a href="https://www.livemeeting.com/cc/usergroups/join?id=201209Fakes&amp;amp;role=attend" target="_blank"&gt;Live Meeting&lt;/a&gt; and the &lt;a href="http://www.eventbrite.com/event/4435661182" target="_blank"&gt;Memphis .NET User Group will be joining us live&lt;/a&gt;. Someone local will monitor the meeting chat room and relay any questions or comments from the online participants.&lt;br /&gt;
&lt;br /&gt;
UPDATE:&lt;br /&gt;
If you attended this talk and would like to provide feedback, you can do so at&amp;nbsp;&lt;a href="http://speakerrate.com/talks/16681-testing-the-untestable-with-visual-studio-2012-fakes"&gt;SpeakerRate.com&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/A3fV-ZYMFxU" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/A3fV-ZYMFxU/memphis-net-user-group-mnug.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/09/memphis-net-user-group-mnug.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-6250613054712789830</guid><pubDate>Thu, 20 Sep 2012 19:38:00 +0000</pubDate><atom:updated>2012-10-20T15:18:45.453-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">conference</category><category domain="http://www.blogger.com/atom/ns#">entrepreneurship</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">speaking</category><category domain="http://www.blogger.com/atom/ns#">Star Wars</category><category domain="http://www.blogger.com/atom/ns#">consulting</category><title>New Talk - Going Solo</title><description>&lt;img align="right" border="1" src="http://farm4.staticflickr.com/3240/2721902123_1dc1fc936f_m.jpg" /&gt;
I'm working on a new talk for &lt;a href="http://www.barcampnashville.org/" target="_blank"&gt;Bar Camp Nashville&lt;/a&gt; and have never had so much fun putting together a presentation. The title of my talk is, "&lt;a href="http://www.barcampnashville.org/bcn12/sessions/going-solo-how-train-your-wookiee" target="_blank"&gt;Going Solo - How to Train Your Wookiee&lt;/a&gt;" and am going with a Star Wars theme. Here's what I've got so far:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Description&lt;/b&gt;:&amp;nbsp;When you started you were but the learner, now you are the master. You can make the Kessel Run in less than twelve parsecs, but you're getting tired of Greedo and Jabba demanding a cut. If you dream of being your own man, join us in discussing how to choose and outfit your ship to embark on the quest for freedom.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Topics&lt;/b&gt;:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Opening Introduction - "I'm Gaines Kergosien, I'm here to rescue you."&lt;/li&gt;
&lt;li&gt;Getting Rich -&amp;nbsp;“Wealth...more than you can imagine.”, “I don’t know. I can imagine quite a bit.”&lt;/li&gt;
&lt;li&gt;Possible Pitfalls - "I've got a bad feeling about this."&lt;/li&gt;
&lt;li&gt;You Can Do It - "I find your lack of faith disturbing."&lt;/li&gt;
&lt;li&gt;Marketing Yourself - "The Force is strong with this one."&lt;/li&gt;
&lt;li&gt;Creating a Company - "Aren't you a little short for a stormtrooper?"&lt;/li&gt;
&lt;li&gt;Contractor Agreements - "Let’s just say we’d like to avoid any imperial entanglements."&lt;/li&gt;
&lt;li&gt;Managing Finances - "Into the garbage chute, flyboy!"&lt;/li&gt;
&lt;li&gt;Paying Taxes - "The Phantom Menace"&lt;/li&gt;
&lt;li&gt;Tax Deductions - "These aren't the taxes you're looking for."&lt;/li&gt;
&lt;li&gt;Working Remotely - "You're all clear, kid! Now lets blow this thing and go home!"&lt;/li&gt;
&lt;li&gt;Subcontractors - "Help me Obi-Wan Kenobi. You’re my only hope."&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Special thanks to &lt;a href="http://twitter.com/cpound" target="_blank"&gt;Scott Walters&lt;/a&gt; and &lt;a href="http://plus.google.com/103840131147988301822" target="new"&gt;Philip Wilson&lt;/a&gt; for helping brainstorm ideas for the talk.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;UPDATE&lt;/b&gt;:&lt;br /&gt;
The schedule has been finalized and we'll be in the Cadillac Ranch Poker room at 3:45pm on October 20th.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;UPDATE 2&lt;/b&gt;:&lt;br /&gt;
Here's a quick preview of a few title slides from the presentation:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;img border="0" src="http://3.bp.blogspot.com/-aU2hHScneKk/UIB1VE1NUTI/AAAAAAAAA84/rVzS8oJndpo/s1600/presentation.gif" /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;UPDATE 3&lt;/b&gt;:&lt;br /&gt;
We'll be streaming live at&amp;nbsp;&lt;a href="http://www.livestream.com/barcampnashville5"&gt;http://www.livestream.com/barcampnashville5&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/25YeRJnEXVU" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/25YeRJnEXVU/new-talk-going-solo.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-aU2hHScneKk/UIB1VE1NUTI/AAAAAAAAA84/rVzS8oJndpo/s72-c/presentation.gif" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/09/new-talk-going-solo.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-1301176989787335689</guid><pubDate>Tue, 18 Sep 2012 18:10:00 +0000</pubDate><atom:updated>2012-09-18T13:31:38.070-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">typemock isolator</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">microsoft fakes</category><category domain="http://www.blogger.com/atom/ns#">nsubstitute</category><category domain="http://www.blogger.com/atom/ns#">fakeiteasy</category><category domain="http://www.blogger.com/atom/ns#">justmock</category><category domain="http://www.blogger.com/atom/ns#">xunit</category><category domain="http://www.blogger.com/atom/ns#">nmock</category><category domain="http://www.blogger.com/atom/ns#">dotcover</category><category domain="http://www.blogger.com/atom/ns#">easymock.net</category><category domain="http://www.blogger.com/atom/ns#">msunit</category><category domain="http://www.blogger.com/atom/ns#">resharper</category><category domain="http://www.blogger.com/atom/ns#">watin</category><category domain="http://www.blogger.com/atom/ns#">testing</category><category domain="http://www.blogger.com/atom/ns#">selenium</category><category domain="http://www.blogger.com/atom/ns#">moq</category><category domain="http://www.blogger.com/atom/ns#">testdriven.net</category><category domain="http://www.blogger.com/atom/ns#">mbunit</category><category domain="http://www.blogger.com/atom/ns#">nunit</category><title>.NET Testing Frameworks</title><description>Most of my testing experience has been with MSTest, NUnit and Selenium and I feel this is an area I need to explore in more depth, so I thought I'd put the question to my colleagues and readers: What testing frameworks do you prefer and why? Below are a few lists of some .NET oriented frameworks with some notes on what sets each of them apart from others. I welcome comments confirming, challenging or correcting these notes as well as suggestions of others I may have missed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Unit Testing&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms243147(v=vs.80).aspx" target="_blank"&gt;MSUnit&lt;/a&gt;&amp;nbsp;- Included with VS, Easy to implement&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nunit.org/" target="_blank"&gt;NUnit&lt;/a&gt;&amp;nbsp;- Most common third party framework&lt;/li&gt;
&lt;li&gt;&lt;a href="http://xunit.codeplex.com/" target="_blank"&gt;xUnit&lt;/a&gt;&amp;nbsp;- Extensible, lends itself to TDD/BDD&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mbunit.com/" target="_blank"&gt;MbUnit&lt;/a&gt;&amp;nbsp;- RowTest for parameterized testing&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Acceptance Testing (web)&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://seleniumhq.org/" target="_blank"&gt;Selenium&lt;/a&gt;&amp;nbsp;- Relies on&amp;nbsp;CSS ID and class selectors&lt;/li&gt;
&lt;li&gt;&lt;a href="http://watin.org/" target="_blank"&gt;WatiN&lt;/a&gt;&amp;nbsp;- Works best with IE&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Tools&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.jetbrains.com/resharper/" target="_blank"&gt;ReSharper&lt;/a&gt;&amp;nbsp;- VS UI enhancements with xUnit integration&lt;/li&gt;
&lt;li&gt;&lt;a href="http://testdriven.net/" target="_blank"&gt;TestDriven.net&lt;/a&gt;&amp;nbsp;- VS testing add-in&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jetbrains.com/dotcover/" target="_blank"&gt;dotCover&lt;/a&gt; - Code coverage&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Mocking&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.nmock.org/" target="_blank"&gt;NMock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sourceforge.net/projects/easymocknet/" target="_blank"&gt;EasyMock.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.typemock.com/" target="_blank"&gt;TypeMock Isolator&lt;/a&gt;&amp;nbsp;- Paid, No strings for method names&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hibernatingrhinos.com/open-source/rhino-mocks" target="_blank"&gt;Rhino Mocks&lt;/a&gt;&amp;nbsp;- Extremely popular&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/moq/" target="_blank"&gt;Moq&lt;/a&gt;&amp;nbsp;- Requires .NET 3.5&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nsubstitute.github.com/" target="_blank"&gt;NSubstitute&lt;/a&gt;&amp;nbsp;- Cleaner with less code needed&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.telerik.com/products/mocking.aspx" target="_blank"&gt;JustMock&lt;/a&gt;&amp;nbsp;- Paid&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fakeiteasy" target="_blank"&gt;FakeItEasy&lt;/a&gt;&amp;nbsp;- Simplifies fake vs. stub usage&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/hh549175%28v=vs.110%29.aspx" target="_blank"&gt;Microsoft Fakes&lt;/a&gt;&amp;nbsp;- Included with VS2012, Previously &lt;a href="http://research.microsoft.com/en-us/projects/moles/" target="_blank"&gt;Moles&lt;/a&gt; from MS Research, Includes features other frameworks only offer with paid versions&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/2HybpjcRcCI" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/2HybpjcRcCI/net-testing-frameworks.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>1</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/09/net-testing-frameworks.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-4616696083005324183</guid><pubDate>Mon, 17 Sep 2012 16:47:00 +0000</pubDate><atom:updated>2012-10-01T13:42:32.663-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">VS2012</category><category domain="http://www.blogger.com/atom/ns#">fakes</category><category domain="http://www.blogger.com/atom/ns#">testing</category><category domain="http://www.blogger.com/atom/ns#">speaking</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">mocking</category><category domain="http://www.blogger.com/atom/ns#">microsoft</category><title>NE Arkansas .NET User Group</title><description>I'm scheduled to speak at the &lt;a href="http://www.neadnug.com/Meetings/Testing-the-Untestable-with-VS2012-Fakes.aspx" target="_blank"&gt;Northeast Arkansas .NET User Group&lt;/a&gt; on &lt;a href="http://communitymegaphone.com/5808" target="_blank"&gt;September 27, 2012&lt;/a&gt;. The topic of this talk will be &lt;a href="http://blog.dotnetdude.net/2012/05/testing-untestable-with-vs11-fakes.html" target="_blank"&gt;Testing the Untestable with Microsoft Visual Studio 2012 Fakes&lt;/a&gt;. I've given this same talk several times at regional conferences and user groups and an overview can be found &lt;a href="http://blog.dotnetdude.net/2012/05/testing-untestable-with-vs11-fakes.html"&gt;on my blog&lt;/a&gt;, however one great thing about speaking at local groups like this is that the audience helps direct the session and we often end up focusing on areas that are most useful to that particular group.&lt;br /&gt;
&lt;br /&gt;
While anyone is welcome to show up, the group leader has requested that attendees &lt;a href="http://www.neadnug.com/Meetings/Testing-the-Untestable-with-VS2012-Fakes.aspx" target="_blank"&gt;RSVP&lt;/a&gt;&amp;nbsp;so they have an idea of how many to expect. See you there!&lt;br /&gt;
&lt;br /&gt;
UPDATE:&lt;br /&gt;
If you attended this talk and would like to provide feedback, you can do so at &lt;a href="http://speakerrate.com/talks/16681-testing-the-untestable-with-visual-studio-2012-fakes"&gt;SpeakerRate.com&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/6GnM-c9iuDw" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/6GnM-c9iuDw/ne-arkansas-net-user-group.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/09/ne-arkansas-net-user-group.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-9129710908020954451</guid><pubDate>Tue, 11 Sep 2012 20:31:00 +0000</pubDate><atom:updated>2012-09-11T15:36:19.390-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVVM</category><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">Caliburn.Micro</category><category domain="http://www.blogger.com/atom/ns#">SOA</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">EF4</category><category domain="http://www.blogger.com/atom/ns#">microsoft</category><title>Great MVVM, WPF, SOA and EF4 Articles</title><description>I was asked to put together some links to articles that would help our IT department ramp up on some of the patterns and technologies we're using. By the time I was done with the email, I realized it might be of use to others outside our organization so part three of my MVVM with WPF series was born. There are many approaches and I highly recommend researching beyond this handful of articles, but for anyone not yet familiar with these concepts I hope they help.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
The Model-View-ViewModel (MVVM) pattern helps to cleanly
separate the business and presentation logic of an application from its user
interface (UI). This separation is key for testability, maintenance and
scalability.&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;a href="http://www.codeproject.com/Articles/66585/Comparison-of-Architecture-presentation-patterns-M"&gt;http://www.codeproject.com/Articles/66585/Comparison-of-Architecture-presentation-patterns-M&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Here’s an introduction to MVVM which illustrates how it
leverages WPF data binding and commands.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;a href="http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial"&gt;http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
The main difference between what we’re proposing and how
they define MVVM in the previous articles is, by using a convention-based
framework such as Caliburn.Micro and events/commands to wire up the View and
ViewModel, they are completely decoupled allowing for better testability and
future scalability. The Caliburn.Micro wiki has a good introduction to the
functionality it provides.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;a href="http://caliburnmicro.codeplex.com/wikipage?title=Introduction"&gt;http://caliburnmicro.codeplex.com/wikipage?title=Introduction&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
This article gives a good introduction to Attribute Based
Validation which allows us to keep validation logic down in the business layer
and entities where it can then bubble up and be reflected in the UI.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;a href="http://www.codeproject.com/Articles/97564/Attributes-based-Validation-in-a-WPF-MVVM-Applicat"&gt;http://www.codeproject.com/Articles/97564/Attributes-based-Validation-in-a-WPF-MVVM-Applicat&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
If there’s interest in going deeper, here’s an article on
using a Service Oriented Architecture (SOA) to decouple service providers from
consumers allowing for greater reuse and insulating the application from core
business logic.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;a href="http://forums.trossenrobotics.com/tutorials/introduction-129/soa-using-c-and-wcf-2307/"&gt;http://forums.trossenrobotics.com/tutorials/introduction-129/soa-using-c-and-wcf-2307/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Finally, a &amp;nbsp;series of
articles outlining the use of a Generic Repository with Entity Framework 4
(EF4) to reduce the amount of plumbing that must be written and maintained for
data access.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
1.&amp;nbsp;&lt;a href="http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/"&gt;http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
2.&amp;nbsp;&lt;a href="http://huyrua.wordpress.com/2010/08/25/specification-pattern-in-entity-framework-4-revisited/"&gt;http://huyrua.wordpress.com/2010/08/25/specification-pattern-in-entity-framework-4-revisited/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
3.&amp;nbsp;&lt;a href="http://huyrua.wordpress.com/2010/12/16/entity-framework-4-poco-repository-and-specification-pattern-upgraded-to-ctp5/"&gt;http://huyrua.wordpress.com/2010/12/16/entity-framework-4-poco-repository-and-specification-pattern-upgraded-to-ctp5/&lt;/a&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;/div&gt;
&lt;br class="Apple-interchange-newline" /&gt;
&lt;hr /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
MVVM with WPF Series Part 1. &lt;a href="http://blog.dotnetdude.net/2012/07/architecting-disconnected-wpf.html" target="_blank"&gt;Disconnected WPF Applications&lt;/a&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
MVVM with WPF Series Part 2. &lt;a href="http://blog.dotnetdude.net/2012/08/wpf-mvvm-with-winforms-controls.html" target="_blank"&gt;WPF MVVM with WinForms Controls&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/zl-Ri8K6ZyQ" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/zl-Ri8K6ZyQ/great-mvvm-wpf-soa-and-ef4-articles.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/09/great-mvvm-wpf-soa-and-ef4-articles.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-8268647670651040055</guid><pubDate>Fri, 17 Aug 2012 15:41:00 +0000</pubDate><atom:updated>2012-08-17T10:44:38.135-05:00</atom:updated><title>How much is experience worth?</title><description>&lt;br /&gt;
During the Facebook IPO in May, UBS lost more than $350 million as a results of a glitch in their systems that re-sent buy orders and accumulated 40 million shares that would have to be sold at a loss.&lt;br /&gt;
&lt;br /&gt;
As a software developer, it's not difficult to imagine the type of glitch that might cause such an issue. Something as small as comparing a value to null or improper error handling can cost a company hundreds of millions of dollars, which begs the question, how important are the architects and developers creating these systems?&lt;br /&gt;
&lt;br /&gt;
It's easy to understand the importance of experience when building something as physically monumental as a sky scraper. People's lives depend on the quality of design and workmanship. Unfortunately, many companies don't see their enterprise software in the same light. They balk over the cost of senior talent and begrudge resources for quality control, then end up spending much more in damage control when systems fail.&lt;br /&gt;
&lt;br /&gt;
How can we nurture a corporate culture that recognizes the value of experienced talent and proactive quality control?&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/bVNdHwVBEDE" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/bVNdHwVBEDE/how-much-is-experience-worth.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/08/how-much-is-experience-worth.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-3314122224974422668</guid><pubDate>Fri, 10 Aug 2012 14:18:00 +0000</pubDate><atom:updated>2012-08-10T09:18:19.775-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">interview</category><title>You're Interviewing Them</title><description>Most of us are raised to believe that a job interview is where a potential employer asks you a bunch of questions to see if you're right for the job, but did you know that the best candidates often spend as much time asking questions as answering them?&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-8V9BcLaf1x8/UCPJblhDEaI/AAAAAAAAA6k/CXFW0ttVJ4s/s1600/inerview.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-8V9BcLaf1x8/UCPJblhDEaI/AAAAAAAAA6k/CXFW0ttVJ4s/s320/inerview.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
Asking questions shows that you're serious about the job and indicates potential employment is as much your decision as it is theirs. Questions about culture and coworkers are a great way to take the focus off money and help the interviewer realize you're looking ahead to what employment with them might look like. A potential long-term employee wants to know if it will be a good fit and somewhere they will be happy working for an extended period of time.&lt;br /&gt;
&lt;br /&gt;
Once an interviewer has established that you have the skills to do a job, the next question on their mind is usually performance. It's one thing to have ability, but quite another to have work ethic and focus. By asking about their top performers you can show your interest in becoming one of them. By keeping the question open ended, such as&amp;nbsp;"What is the most important quality you see in your top employees?",&amp;nbsp;you can gain insight into what's most important to them and provide examples of how you've displayed said quality later in the interview.&lt;br /&gt;
&lt;br /&gt;
Asking the right question isn't just about gathering information and doesn't replace the need for&amp;nbsp;preparatory&amp;nbsp;research. In fact, it's vital to have a basic understanding of the company's business in order to know what questions to ask. One example is the question, "How do you deal with [insert challenge here]?" Addressing a challenge facing the business not only shows you've done your homework, but it also indicates you're a problem solver and interested in being part of the solution.&lt;br /&gt;
&lt;br /&gt;
Some questions depend on the interviewer. When being interviewed by someone from human resources it is probably best to keep questions general with focus on the overall company and position in question. With a hiring manager you're able to delve deeper into how they measure success and what they need most in an employee. The best opportunity for information gathering, however, comes when interviewing with a peer. Asking about their experiences with that company and manager not only provides valuable insight into the position, but shows respect for their opinion which can be very&amp;nbsp;endearing.&lt;br /&gt;
&lt;br /&gt;
Good questions don't take the place of being qualified and informed, but they are a great way to make yourself stand out from the crowd and determine if this specific opportunity is right for you.&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/QdVTYmMYbYA" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/QdVTYmMYbYA/youre-interviewing-them.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-8V9BcLaf1x8/UCPJblhDEaI/AAAAAAAAA6k/CXFW0ttVJ4s/s72-c/inerview.gif" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/08/youre-interviewing-them.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-6401250797640051453</guid><pubDate>Thu, 09 Aug 2012 14:51:00 +0000</pubDate><atom:updated>2012-08-10T12:52:55.292-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVVM</category><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">silverlight</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">WinForms</category><category domain="http://www.blogger.com/atom/ns#">microsoft</category><title>WPF MVVM with WinForms Controls</title><description>&lt;span style="font-size: x-small;"&gt;This is the second part of my series on using MVVM with WPF. In the first article I discussed &lt;a href="http://blog.dotnetdude.net/2012/07/architecting-disconnected-wpf.html" target="_blank"&gt;architecting disconnected applications&lt;/a&gt; and how MVVM was a great fit for WPF smart clients as well as Silverlight web clients. Now we move on to the process of refactoring an old Windows Forms application to use this new architecture.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The main concern with changing an underlying technology is the initial investment in rewriting code. To help mitigate this issue, WPF has provided a &lt;b&gt;WindowsFormsHost &lt;/b&gt;element that allows us to host WinForms controls inside of a WPF Page. Obviously this limits how effectively we can leverage other features provided by WPF, however with a few workarounds it's a viable solution to avoid having to completely rewrite those old WinForms controls.&lt;br /&gt;
&lt;br /&gt;
How easy is it to implement the WindowsFormsHost?&lt;br /&gt;
&lt;img alt="&amp;lt;WindowsFormsHost&amp;gt;&amp;lt;wfh:WinFormsUserControl x:Name=&amp;quot;LegacyUserControl&amp;quot; /&amp;gt;&amp;lt;/WindowsFormsHost&amp;gt;" border="0" src="http://4.bp.blogspot.com/-lyGYvyrjtus/UBqHypQggxI/AAAAAAAAA5k/w-MpqjpC2no/s400/WindowsFormsHostTag.GIF" /&gt;
&lt;br /&gt;
&lt;br /&gt;
Okay, it's only slightly more complicated than that. You will need to add add a reference to &lt;b&gt;WindowsFormIntegration &lt;/b&gt;and possibly&amp;nbsp;&lt;b&gt;System.Windows.Forms&lt;/b&gt; (if it is not already referenced).&lt;br /&gt;
&lt;br /&gt;
Now the question comes to how we interact with this control from our ViewModel since we can't use WPF bindings in our WinForms control. We can bridge this gap by adding events to our WinForms user control.&lt;br /&gt;
&lt;img border="0" height="182" src="http://4.bp.blogspot.com/-XPd5eAOMSTI/UBqYHNOYX-I/AAAAAAAAA6U/kwuCkSw0FME/s400/WindowsFormsHostSayHelloClick.GIF" width="500" /&gt;&lt;br /&gt;
&lt;br /&gt;
Then we wire up the events to our DataContext in our WPF Page code-behind.&lt;br /&gt;
&lt;img border="0" src="http://3.bp.blogspot.com/-CdhuMAMmQ7o/UBqXbti9Y0I/AAAAAAAAA6M/iX3cDqBb7BQ/s1600/WindowsFormsHostCodeBehind.gif" /&gt;
&lt;br /&gt;
&lt;br /&gt;
While I generally prefer to avoid using the code-behind, we also don't want our ViewModel to be aware of the internal workings of our View.
&lt;br /&gt;
&lt;br /&gt;
The end result is our Windows Forms control interacts with elements in our WPF Page.&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="demonstration" border="0" src="http://4.bp.blogspot.com/-ObaaJ_mFQiQ/UBqVXX0tb6I/AAAAAAAAA6E/OiOBfVvlO1Y/s1600/WindowsFormsHostDemo.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://www.box.com/s/7a8ac099f9f1e9fc645f" target="_blank"&gt;Download Demo Source Code&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/SECAR2KsMRw" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/SECAR2KsMRw/wpf-mvvm-with-winforms-controls.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-lyGYvyrjtus/UBqHypQggxI/AAAAAAAAA5k/w-MpqjpC2no/s72-c/WindowsFormsHostTag.GIF" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/08/wpf-mvvm-with-winforms-controls.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-6301580647012713714</guid><pubDate>Tue, 24 Jul 2012 21:47:00 +0000</pubDate><atom:updated>2012-07-25T10:51:13.061-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVVM</category><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">Disconnected Service Agent</category><category domain="http://www.blogger.com/atom/ns#">Sync Framework</category><category domain="http://www.blogger.com/atom/ns#">SOA</category><category domain="http://www.blogger.com/atom/ns#">MVP</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">EF4</category><category domain="http://www.blogger.com/atom/ns#">WinForms</category><category domain="http://www.blogger.com/atom/ns#">microsoft</category><category domain="http://www.blogger.com/atom/ns#">WCF</category><title>Disconnected WPF Applications</title><description>&lt;div style="text-align: justify;"&gt;
I was recently tasked with presenting a plan to turn an existing WinForms program into an enterprise level application. They wanted to stick with a Windows client, but since each form would already need significant rework to extract the business logic, I suggested moving to WPF using the &lt;b&gt;Model-View-ViewModel&lt;/b&gt; (MVVM) presentation pattern.&lt;/div&gt;
&lt;br /&gt;
MVVM is basically a type of &lt;b&gt;Model-View-Presenter&lt;/b&gt; (MVP) pattern that makes use of declarative bindings. State and logic are stored in the Presenter (ViewModel) which presents an abstract view of the UI with no knowledge of what View will implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-kKeM8qJUV8M/UBAVvE3nFyI/AAAAAAAAA5M/AswHVFIvF0g/s1600/Disconnected%2BApplication%2Busing%2BAgents.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-kKeM8qJUV8M/UBAVvE3nFyI/AAAAAAAAA5M/AswHVFIvF0g/s400/Disconnected%2BApplication%2Busing%2BAgents.gif" /&gt;&lt;/a&gt;
With the Presentation Layer taken care of, it was time to address the heart of the Application. The immediate need was for a smart client, however the solution was still very young and continually changing so it seemed a Service Oriented Architecture (SOA) would provide the most flexability and reuse. The question was how a disconnected client would use services.&lt;br /&gt;
&lt;br /&gt;
Microsoft used to offer an application block for this specific purpose. The &lt;a href="http://msdn.microsoft.com/en-us/library/cc540752.aspx" target="_blank"&gt;Disconnected Service Agent Application Block&lt;/a&gt; helped maintain a queue of web service requests while working disconnected (offline), then submit them to the server when it became available. Unfortunately, it is no longer being maintained and I have not found a suggested replacement. My guess is that they would encourage use of &lt;a href="http://msdn.microsoft.com/en-us/sync/bb821992.aspx" target="_blank"&gt;Sync Framework&lt;/a&gt;, which is designed to synchronize databases and files, but can use custom providers as well.&lt;br /&gt;
&lt;br /&gt;
We're using Sync Framework to replicate data down to the client for offline use, but to utilize SOA and keep business logic/validation on the server we need a way of queuing web service calls and resolving any conflicts that occur. I'm currently in the process of researching whether a Sync Framework custom provider would be a good fit or if the old disconnected service agent application block would be a good starting point.&lt;br /&gt;
&lt;br /&gt;
The existing relies very heavily on SQL stored procedures. Fortunately, Entity Framework (EF4) supports calling the existing stored procedures so they wont all have to be rewritten immediately. The plan is to gradually move business logic up into the application layer and use entity model. I've also added a generic repository to allow mocking.&lt;br /&gt;
&lt;br /&gt;
I welcome feedback and suggestions. If you've tinkered with custom providers for Sync Framework or have suggestions for how to best queue and resolve service calls I'd love to hear from you, either by leaving a comment below or on twitter (&lt;a href="http://twitter.com/gainesk" target="_blank"&gt;@gainesk&lt;/a&gt;).&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/kahxdXW2RpE" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/kahxdXW2RpE/architecting-disconnected-wpf.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-kKeM8qJUV8M/UBAVvE3nFyI/AAAAAAAAA5M/AswHVFIvF0g/s72-c/Disconnected%2BApplication%2Busing%2BAgents.gif" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/07/architecting-disconnected-wpf.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-1357677193118405742</guid><pubDate>Thu, 19 Jul 2012 14:01:00 +0000</pubDate><atom:updated>2012-07-19T09:44:30.465-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">home improvement</category><title>Water pressure issues? Let it flow!</title><description>&lt;img style="float: right; padding: 3px 3px 0px 3px;" border="0" height="200" src="http://1.bp.blogspot.com/-gXbzw8GKExk/UAgS8zYD9VI/AAAAAAAAA3o/Me_LcqABWqY/s400/gauge.png" width="184" /&gt;
Most of my articles are about technology and software development, however I recently purchased a new home and, as I worked on various things around the house I realized others might benefit from a few of the more common issues I've addressed. Some of these problems might seem simple to fix, however I figure there are others like me who are learning these things for the first time and might find my experiences helpful.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Problem&lt;/b&gt;: Water pressure is fine at first, but within a few seconds flow decreases significantly. The hot water never gets beyond warm, but both hot and cold suffer from the same decreased flow.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Diagnosis&lt;/b&gt;: It's important to distinguish between water pressure and volume. Low water pressure results in a lower flow as soon as valve is opened. This can result from undersized pipes or the use of valves/connections that reduce flow as well as simply receiving low pressure from the source. A volume issue results from some restriction farther down the line that allows a higher pressure to build over time, but once that pressure is released (such as in the first few seconds of running water) then the pressurized volume is exhausted and flow is limited by the restriction. If both hot and cold lines suffer from the same symptoms then the problem most likely exists on the main water line before the water heater.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Solution&lt;/b&gt;: Every situation is different, but in my case I found that the main cutoff valve at the meter box was not completely open. One and a half turns more and the restriction was gone restoring full flow to the house.&lt;br /&gt;
&lt;br /&gt;
If you've run into a similar problem I'd love to hear about it. Comments are appreciated and you can find me on twitter (&lt;a href="http://twitter.com/gainesk"&gt;@gainesk&lt;/a&gt;).&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/mT21Hibig3w" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/mT21Hibig3w/water-pressure-issues-let-it-flow.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-gXbzw8GKExk/UAgS8zYD9VI/AAAAAAAAA3o/Me_LcqABWqY/s72-c/gauge.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/07/water-pressure-issues-let-it-flow.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-2222032857652977917</guid><pubDate>Fri, 08 Jun 2012 13:52:00 +0000</pubDate><atom:updated>2012-06-08T09:36:36.065-05:00</atom:updated><title>Should Internet Access be a Right?</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-HrO1Oehxr6E/T9INLmczDmI/AAAAAAAAA2w/YACeyDKYT4c/s1600/internet-access-basic-human-right.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img align="right" border="1" height="320" src="http://3.bp.blogspot.com/-HrO1Oehxr6E/T9INLmczDmI/AAAAAAAAA2w/YACeyDKYT4c/s320/internet-access-basic-human-right.jpg" width="234" style="padding:5px;" /&gt;&lt;/a&gt;&lt;/div&gt;
Internet access has become a mainstay of our society and arguably more important to staying informed and the ability to make a living than phone or television. It's something that can be taken for granted when living in a&amp;nbsp;densely&amp;nbsp;populated city, but many rural areas are left with spotty or non-existent broadband service. For software developers in particular this can make working remotely and offering after-hours support difficult or even impossible.&lt;br /&gt;
&lt;br /&gt;
I'm all for capitalism and a competitive market and I understand that most utility/service companies are out to make a profit so providing service to new areas is something they have to consider carefully, however when it comes to regional services these companies often have a monopoly that discourages new competitors and leaves residents with limited choices, and sometimes no choice at all. That's one reason why companies are often required to sign franchise agreements with city, county or state where they agree to provide a certain level of service in exchange for their territory.&lt;br /&gt;
&lt;br /&gt;
For example, Comcast signed a franchise agreement with Franklin County (TN) which states they will, "provide Cable Service to every dwelling unit wtihin the Franchise Area reaching the minimum density of at least twenty-five (25) dwelling units per mile". To put this in perspective, if you split one square mile up into equal lots then each resident would have approximately 25 acres. This means that they have committed to providing service to all but the most rural and&amp;nbsp;sparsely&amp;nbsp;populated areas.&lt;br /&gt;
&lt;br /&gt;
One important point regarding this agreement is that it only addresses Cable Service, which is defined as, "(A) the one-way transmission to Customers of (i) video programming, or (ii) other programming service, and (B) Customer interaction, if any, which is required fo rthe selection or use of such video programming or other programming service." While it makes sense they would offer additional services once the company has invested in running lines out to new areas, they have no&amp;nbsp;commitment&amp;nbsp;to providing internet access.&lt;br /&gt;
&lt;br /&gt;
Does the area you live in have a franchise agreement with local internet service providers? Do you think that internet access is something they should be required to provide to residents or is it a luxury?&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/jymE9yWYF70" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/jymE9yWYF70/should-internet-access-be-right.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-HrO1Oehxr6E/T9INLmczDmI/AAAAAAAAA2w/YACeyDKYT4c/s72-c/internet-access-basic-human-right.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/06/should-internet-access-be-right.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-4913646426648533005</guid><pubDate>Tue, 15 May 2012 18:15:00 +0000</pubDate><atom:updated>2012-05-15T13:19:45.246-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">IIS</category><category domain="http://www.blogger.com/atom/ns#">EF4</category><category domain="http://www.blogger.com/atom/ns#">oracle data access components</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework</category><category domain="http://www.blogger.com/atom/ns#">odac</category><category domain="http://www.blogger.com/atom/ns#">WCF</category><title>Using ODAC with EF4 via WCF</title><description>Oracle Data Access Components (ODAC) 11.2 Release 4 (11.2.0.3.0) with Oracle Developer Tools for Visual Studio includes support for Entity Framework and LINQ. Implementation is simple, however when I called the query from a WCF service I got the error:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
System.ArgumentException was unhandled by user code&lt;br /&gt;&amp;nbsp; Message=The specified store provider cannot be found in the configuration, or is not valid.&lt;br /&gt;&amp;nbsp; Source=System.Data.Entity&lt;br /&gt;&amp;nbsp; StackTrace:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;at System.Data.EntityClient.EntityConnection.GetFactory(String providerString)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;...&lt;br /&gt;&amp;nbsp; InnerException: System.ArgumentException&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Message=Unable to find the requested .Net Framework Data Provider. &amp;nbsp;It may not be installed.&lt;/blockquote&gt;
&lt;br /&gt;
A bit of research discovered that 32-Bit Applications are disabled by default in the IIS Application Pool. As soon as I changed Enable 32-Bit Applications to True everything worked fine.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-1gWEPFlK234/T7Kc1mz-mPI/AAAAAAAAAvI/WeLPN-TUrak/s1600/32bit.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-1gWEPFlK234/T7Kc1mz-mPI/AAAAAAAAAvI/WeLPN-TUrak/s640/32bit.jpg" width="521" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/IVmaWBT-5iw" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/IVmaWBT-5iw/using-odac-with-ef4-via-wcf.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-1gWEPFlK234/T7Kc1mz-mPI/AAAAAAAAAvI/WeLPN-TUrak/s72-c/32bit.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/05/using-odac-with-ef4-via-wcf.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-8592316271961916757</guid><pubDate>Tue, 08 May 2012 09:16:00 +0000</pubDate><atom:updated>2012-09-21T09:59:05.825-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">VS2012</category><category domain="http://www.blogger.com/atom/ns#">unit testing</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">demo</category><category domain="http://www.blogger.com/atom/ns#">training</category><category domain="http://www.blogger.com/atom/ns#">fakes</category><category domain="http://www.blogger.com/atom/ns#">testing</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">moles</category><category domain="http://www.blogger.com/atom/ns#">microsoft</category><category domain="http://www.blogger.com/atom/ns#">presentation</category><title>Testing the Untestable with VS2012 Fakes</title><description>One of the new features included with Visual Studio 2012 is the Fakes Framework which offers the ability to detour code at runtime and isolate functionality for true unit testing, regardless of whether the code was written with testing in mind.&lt;br /&gt;
&lt;br /&gt;
I began speaking on Fakes back when it was a beta product from Microsoft Research called&amp;nbsp;&lt;a href="http://blog.dotnetdude.net/2012/02/microsoft-pex-and-moles.html" target="_blank"&gt;Moles&lt;/a&gt;. While the core functionality remains the same, Microsoft has streamlined the implementation and now calls the detour mechanism a shim rather than a mole.&lt;br /&gt;
&lt;br /&gt;
If you have attended this or another of my talks at a user group or conference, please take a moment to share your feedback on &lt;a href="http://speakerrate.com/gaines" target="_blank"&gt;SpeakerRate&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The PowerPoint is available on&amp;nbsp;&lt;a href="http://www.slideshare.net/gaines/testing-the-untestable-with-visual-studio-2011-fakes" target="_blank"&gt;SlideShare&lt;/a&gt;&amp;nbsp;and below are links to the code demonstrated in the presentation.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Demos&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="https://www.box.com/s/a8bd770df8849e87821e" target="_blank"&gt;Y2K Checker&lt;/a&gt;&amp;nbsp;(simple introduction)&lt;br /&gt;
&lt;a href="https://www.box.com/s/ceab1e1cc01c32e49a8f" target="_blank"&gt;DateTime Audit&lt;/a&gt;&amp;nbsp;(avoiding non-deterministic tests)&lt;br /&gt;
&lt;a href="https://www.box.com/s/41ffe5fd8cf5af9b15da" target="_blank"&gt;File Reader&lt;/a&gt;&amp;nbsp;(shimming file system access)&lt;br /&gt;
&lt;a href="https://www.box.com/s/461b521f53e64ce9d7e9" target="_blank"&gt;Repository&lt;/a&gt;&amp;nbsp;(stubbing interfaces)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Resources&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://aka.ms/vs11" target="_blank"&gt;Visual Studio 2011&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://aka.ms/vs11-fakes" target="_blank"&gt;Fakes MSDN Documentation&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/Z-tq1CfNhhg" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/Z-tq1CfNhhg/testing-untestable-with-vs11-fakes.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>1</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/05/testing-untestable-with-vs11-fakes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-1681287247680234806</guid><pubDate>Fri, 16 Mar 2012 17:58:00 +0000</pubDate><atom:updated>2012-03-16T12:58:49.700-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ignite</category><category domain="http://www.blogger.com/atom/ns#">Code PaLOUsa</category><category domain="http://www.blogger.com/atom/ns#">cpl12</category><category domain="http://www.blogger.com/atom/ns#">gaming</category><title>Ignite Talk on Gaming</title><description>I signed up to give an Ignite talk this evening on why everyone should play games. For anyone who's not familiar with Ignite talks, presenters share a personal or professional passion, using 20 slides that auto-advance every 15 seconds for a total of five minutes.&lt;br /&gt;
&lt;br /&gt;
My slides can be found on my SlideShare profile:&lt;br /&gt;
&lt;a href="http://www.slideshare.net/gaines/ignite-reasons-to-play-games"&gt;http://www.slideshare.net/gaines/ignite-reasons-to-play-games&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
If you attended one of my talks, please feel free to provide feedback at SpeakerRate:&lt;br /&gt;
&lt;a href="http://speakerrate.com/gaines"&gt;http://speakerrate.com/gaines&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/6kUHGzWwh-E" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/6kUHGzWwh-E/ignite-talk-on-gaming.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>0</thr:total><georss:featurename>409 S 5th St, Louisville, KY 40202, USA</georss:featurename><georss:point>38.2526647 -85.7584557</georss:point><georss:box>38.05316019999999 -86.0743127 38.4521692 -85.4425987</georss:box><feedburner:origLink>http://blog.dotnetdude.net/2012/03/ignite-talk-on-gaming.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-2234101442651480600</guid><pubDate>Tue, 21 Feb 2012 21:17:00 +0000</pubDate><atom:updated>2012-02-21T15:17:12.727-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">jquery</category><category domain="http://www.blogger.com/atom/ns#">html</category><category domain="http://www.blogger.com/atom/ns#">browser</category><title>Truncating Text by Pixel Width</title><description>If you've ever tried truncating text by the number of characters then you've probably noticed that most of the fonts we use are not fixed-width, resulting in different lengths depending on which characters are used. This is particularly true of spaces which are much thinner than other characters.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-EyB4z8yzyOU/T0QAIeBgMQI/AAAAAAAAAiA/9tGnlx-Ti_w/s1600/truncation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="http://4.bp.blogspot.com/-EyB4z8yzyOU/T0QAIeBgMQI/AAAAAAAAAiA/9tGnlx-Ti_w/s400/truncation.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I ran into this problem recently when creating a message preview module and I solved it by placing the text in a hidden div set to my desired width, then chopping off characters from the end until it fit. Of course, we don't want partial words so I wait until we reach a space before returning the truncated text.&lt;br /&gt;
&lt;br /&gt;
Here is the div (placed in the page body):&lt;br /&gt;
&lt;span style="color: cyan; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;div&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: cyan;"&gt;="hiddenTruncateHelper"&lt;/span&gt; &lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: cyan;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;position&lt;/span&gt;&lt;span style="color: cyan;"&gt;: absolute; &lt;/span&gt;&lt;span style="color: red;"&gt;visibility&lt;/span&gt;&lt;span style="color: cyan;"&gt;: hidden; &lt;/span&gt;&lt;span style="color: red;"&gt;display&lt;/span&gt;&lt;span style="color: cyan;"&gt;: block; &lt;/span&gt;&lt;span style="color: red;"&gt;height&lt;/span&gt;&lt;span style="color: cyan;"&gt;: auto;"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: red;"&gt;div&lt;/span&gt;&lt;span style="color: cyan;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
...and the&amp;nbsp;JavaScript:&lt;br /&gt;
&lt;span style="color: cyan; font-family: Consolas; font-size: 9.5pt;"&gt;var&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; truncate = &lt;span style="color: cyan;"&gt;function&lt;/span&gt;
(str, width, height) {&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;var&lt;/span&gt; bits, bit, i;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;span style="color: red;"&gt;"#hiddenTruncateHelper"&lt;/span&gt;).width(width);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;span style="color: red;"&gt;"#hiddenTruncateHelper"&lt;/span&gt;).text(str);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bits =
str.split(&lt;span style="color: red;"&gt;''&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;if&lt;/span&gt; ($(&lt;span style="color: red;"&gt;"#hiddenTruncateHelper"&lt;/span&gt;).getHiddenDimensions().height
&amp;gt; height) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;for&lt;/span&gt; (i = bits.length - 1; i &amp;gt; -1; --i) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
$(&lt;span style="color: red;"&gt;"#hiddenTruncateHelper"&lt;/span&gt;).text(bits.join(&lt;span style="color: red;"&gt;''&lt;/span&gt;));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
bit = bits[i];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
bits.length = i;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;if&lt;/span&gt; (&lt;span style="color: red;"&gt;' '&lt;/span&gt; === bit
&amp;amp;&amp;amp; $(&lt;span style="color: red;"&gt;"#hiddenTruncateHelper"&lt;/span&gt;).getHiddenDimensions().height
&amp;lt;= height) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color: cyan;"&gt;break&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;return&lt;/span&gt; bits.join(&lt;span style="color: red;"&gt;''&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
One problem I had was that the browser kept returning zero for the div height because it is hidden. While searching for an answer I found &lt;a href="http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/" target="_blank"&gt;a blog by Tim Banks&lt;/a&gt; where he shares an extension method to get the dimensions for a hidden element.&lt;br /&gt;
&lt;span style="color: green; font-family: Consolas; font-size: 9.5pt;"&gt;//Optional parameter includeMargin
is used when calculating outer dimensions&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;(&lt;span style="color: cyan;"&gt;function&lt;/span&gt; ($) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
$.fn.getHiddenDimensions = &lt;span style="color: cyan;"&gt;function&lt;/span&gt;
(includeMargin) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;var&lt;/span&gt; $item = &lt;span style="color: cyan;"&gt;this&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; props
= { position: &lt;span style="color: red;"&gt;'absolute'&lt;/span&gt;, visibility: &lt;span style="color: red;"&gt;'hidden'&lt;/span&gt;, display: &lt;span style="color: red;"&gt;'block'&lt;/span&gt;
},&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dim =
{ width: 0, height: 0, innerWidth: 0, innerHeight: 0, outerWidth: 0,
outerHeight: 0 },&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;$hiddenParents = $item.parents().andSelf().not(&lt;span style="color: red;"&gt;':visible'&lt;/span&gt;),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;includeMargin = (includeMargin == &lt;span style="color: cyan;"&gt;null&lt;/span&gt;) ? &lt;span style="color: cyan;"&gt;false&lt;/span&gt; :
includeMargin;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;var&lt;/span&gt; oldProps = [];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
$hiddenParents.each(&lt;span style="color: cyan;"&gt;function&lt;/span&gt; () {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;var&lt;/span&gt; old = {};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;for&lt;/span&gt; (&lt;span style="color: cyan;"&gt;var&lt;/span&gt; name &lt;span style="color: cyan;"&gt;in&lt;/span&gt; props) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
old[name] = &lt;span style="color: cyan;"&gt;this&lt;/span&gt;.style[name];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color: cyan;"&gt;this&lt;/span&gt;.style[name] = props[name];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
oldProps.push(old);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
dim.width = $item.width();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
dim.outerWidth = $item.outerWidth(includeMargin);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
dim.innerWidth = $item.innerWidth();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
dim.height = $item.height();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
dim.innerHeight = $item.innerHeight();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
dim.outerHeight = $item.outerHeight(includeMargin);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
$hiddenParents.each(&lt;span style="color: cyan;"&gt;function&lt;/span&gt; (i) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;var&lt;/span&gt; old = oldProps[i];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;for&lt;/span&gt; (&lt;span style="color: cyan;"&gt;var&lt;/span&gt; name &lt;span style="color: cyan;"&gt;in&lt;/span&gt; props) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color: cyan;"&gt;this&lt;/span&gt;.style[name] = old[name];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: cyan;"&gt;return&lt;/span&gt; dim;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;} (jQuery));&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
That's all there is to it. We just call our method and pass in the string, desired height and width (in pixels) and it returns the truncated text. Just add some ellipses with a tooltip (title) and we're done!&lt;br /&gt;
&lt;span style="color: cyan; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;a&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;href&lt;/span&gt;&lt;span style="color: cyan; font-family: Consolas; font-size: 9.5pt;"&gt;="#"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;title&lt;/span&gt;&lt;span style="color: cyan; font-family: Consolas; font-size: 9.5pt;"&gt;="FULL TEXT"&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;...&lt;/span&gt;&lt;span style="color: cyan; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;a&lt;/span&gt;&lt;span style="color: cyan; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
If you have a suggestion for how this solution could be improved or a question, please post it here. Thanks for reading!&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/69dd8WGSQ5A" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/69dd8WGSQ5A/truncating-text-by-pixel-width.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-EyB4z8yzyOU/T0QAIeBgMQI/AAAAAAAAAiA/9tGnlx-Ti_w/s72-c/truncation.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/02/truncating-text-by-pixel-width.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-7739362698684051285</guid><pubDate>Thu, 09 Feb 2012 19:13:00 +0000</pubDate><atom:updated>2012-02-10T15:39:56.400-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">demo</category><category domain="http://www.blogger.com/atom/ns#">training</category><category domain="http://www.blogger.com/atom/ns#">.net user group</category><category domain="http://www.blogger.com/atom/ns#">pex</category><category domain="http://www.blogger.com/atom/ns#">moles</category><category domain="http://www.blogger.com/atom/ns#">microsoft</category><category domain="http://www.blogger.com/atom/ns#">presentation</category><title>Microsoft PEX and Moles</title><description>&lt;a href="http://research.microsoft.com/" target="_blank"&gt;Microsoft Research&lt;/a&gt; is currently beta testing a couple new frameworks that can make unit testing your code a breeze.&amp;nbsp;&lt;a href="http://research.microsoft.com/en-us/projects/pex/" target="_blank"&gt;Pex&lt;/a&gt; is a testing tool that analyzes code and generates unit tests. &lt;a href="http://research.microsoft.com/en-us/projects/moles/" target="_blank"&gt;Moles&lt;/a&gt; is a framework that isolates code with dependencies on other application layers or frameworks. With just a few mouse clicks, you can generate suites of tests against code that previously may have been difficult or impossible to test.
&lt;br /&gt;
&lt;br /&gt;
Tonight I'll be giving a presentation on these technologies at the &lt;a href="http://nashdotnet.org/2012/02/february-09-2012-gaines-kergosien-testing-with-microsoft-pex-and-moles/" target="_blank"&gt;Nashville .NET User Group&lt;/a&gt;. For anyone who can't make it you can watch and discuss it in my &lt;a href="https://plus.google.com/hangouts/extras/kergosien.net/gaines" target="_blank"&gt;Google Hangout.&lt;/a&gt; I'm hoping to post a video of the presentation to this blog within the next couple weeks. I'll also be giving a similar presentation and &lt;a href="http://www.codepalousa.com/speakers/bios/itemlist/user/142-gaineskergosien" target="_blank"&gt;Code PaLOUsa&lt;/a&gt; on March 17th. Below are links to the demo solutions and Prezi used in the presentation.
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://prezi.com/h-ezka_s8wjb/isolation-and-testing-with-microsoft-pex-and-moles/" target="_blank"&gt;Presentation on Prezi&lt;/a&gt;&lt;br /&gt;
Using Moles to Mock DateTime (&lt;a href="http://www.box.com/s/k5xzjnsojmtdmh97hlax" target="_blank"&gt;Y2KBug.zip&lt;/a&gt;)&lt;br /&gt;
Using Moles to Stub Interfaces (&lt;a href="http://www.box.com/s/7lcrs2t8opj400iyvn56" target="_blank"&gt;MolesDemo.zip&lt;/a&gt;)&lt;br /&gt;
Using PEX to Generate Parameterized Unit Tests (&lt;a href="http://www.box.com/s/7yeb9tmt4hm9fnylxn2v" target="_blank"&gt;PEXDemo.zip&lt;/a&gt;, &lt;a href="http://www.box.com/s/3nxn4pfljm8lml0ziqgo" target="_blank"&gt;PEXDemo-Result.zip&lt;/a&gt;)&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/J818C33C0s4" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/J818C33C0s4/microsoft-pex-and-moles.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2012/02/microsoft-pex-and-moles.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-107486965713406362.post-6501131801401817570</guid><pubDate>Mon, 28 Nov 2011 16:12:00 +0000</pubDate><atom:updated>2011-11-28T11:04:42.641-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">occupy</category><title>You are the 1%!</title><description>According to &lt;a href="http://www.wolframalpha.com/input/?i=average+united+states+income" target="_blank"&gt;Wolfram Alpha&lt;/a&gt;, the average US household income is &lt;b&gt;&lt;span class="Apple-style-span" style="color: #274e13;"&gt;$43,460&lt;/span&gt;&lt;/b&gt;/year. &lt;a href="http://www.globalrichlist.com/" target="_blank"&gt;Global Rich List&lt;/a&gt; indicates this income is in the top &lt;b&gt;&lt;span class="Apple-style-span" style="color: #660000;"&gt;2.17%&lt;/span&gt;&lt;/b&gt; of the world's richest people. Anyone making over &lt;b&gt;&lt;span class="Apple-style-span" style="color: #274e13;"&gt;$50,000&lt;/span&gt;&lt;/b&gt;/year is quite literally part of the top &lt;b&gt;&lt;span class="Apple-style-span" style="color: #660000;"&gt;1%&lt;/span&gt;&lt;/b&gt; worldwide.&lt;br /&gt;
&lt;br /&gt;
I agree that corruption in corporations and government has resulted in an unfair distribution of wealth here in the United States, but it still seems pretty self-centered not to consider that much of the rest of the world is suffering true poverty.&lt;br /&gt;
&lt;br /&gt;
We just had a Thanksgiving holiday where we gave thanks for what we have, followed by Black Friday where shoppers clamor to buy more. As we enter the Christmas season lets remember that there are some things every person should have, like clean drinking water, food in their stomach and a roof over their head.&lt;br /&gt;
&lt;br /&gt;
Here's a list of some non-profit organizations that can help make this happen with your help:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.toysfortots.org/" target="_blank"&gt;Toys for Tots&lt;/a&gt;&amp;nbsp;-&amp;nbsp;deliver, through a new toy at Christmas, a message of hope to less fortunate youngsters&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.charitywater.org/" target="_blank"&gt;charity: water&lt;/a&gt;&amp;nbsp;-&amp;nbsp;bringing clean and safe drinking water to people in developing nations&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.heifer.org/" target="_blank"&gt;Heifer International&lt;/a&gt;&amp;nbsp;(giving available via &lt;a href="http://www.heiferfoundation.org/" target="_blank"&gt;Heifer Foundation&lt;/a&gt;)-&amp;nbsp;gives out gifts of livestock, seeds and trees and extensive training to those in need&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Personally, I'm making a sustainable donation to the&amp;nbsp;Heifer Foundation General Endowment in the name of my niece and nephew so they can be part of helping to&amp;nbsp;end hunger by giving people the means to feed themselves.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DotNetDude/~4/-P4EcPB2Qh8" height="1" width="1"/&gt;</description><link>http://feeds.dotnetdude.net/~r/DotNetDude/~3/-P4EcPB2Qh8/you-are-one-percent.html</link><author>noreply@blogger.com (Gaines Kergosien)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.dotnetdude.net/2011/11/you-are-one-percent.html</feedburner:origLink></item></channel></rss>
