<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>What did you learn today?</title>
  <link rel="alternate" type="text/html" href="http://blog.philknows.net/" />
  <link rel="self" href="http://blog.philknows.net/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2009-05-21T13:01:06.839158-04:00</updated>
  <author>
    <name>Phil Denoncourt III</name>
  </author>
  <subtitle>Phil Denoncourt's Technology Rants</subtitle>
  <id>http://blog.philknows.net/</id>
  <generator uri="http://www.dasblog.net" version="2.0.7180.0">DasBlog</generator>
  <entry>
    <title>Globalization and Localization in ASP.NET</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,e781fae8-f9cf-47d8-bc0b-d66b5141721e.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,e781fae8-f9cf-47d8-bc0b-d66b5141721e.aspx</id>
    <published>2009-05-21T12:54:12.864499-04:00</published>
    <updated>2009-05-21T13:01:06.839158-04:00</updated>
    <category term="ASP.NET" label="ASP.NET" scheme="http://blog.philknows.net/CategoryView,category,ASP.NET.aspx" />
    <category term="Development" label="Development" scheme="http://blog.philknows.net/CategoryView,category,Development.aspx" />
    <category term="Speaking Engagements" label="Speaking Engagements" scheme="http://blog.philknows.net/CategoryView,category,Speaking%2BEngagements.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had a great time talking about Globalization and Localization for ASP.NET applications
last night at the <a href="http://www.neasp.net">New England ASP.NET User Group</a>. 
There are definately a lot of things that you need to be aware of when you're localizing
a site.  Thanks to <a href="http://www.paradigminc.us/">Dean Serrentino</a> for
inviting me to speak.  I've uploaded the slides and demo applications below.
</p>
        <a href="http://blog.philknows.net/content/binary/ASP.NetGlobalizationAndLocalization.zip">ASP.NetGlobalizationAndLocalization.zip
(480.36 KB)</a>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=e781fae8-f9cf-47d8-bc0b-d66b5141721e" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Speech Recognition in C#</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,6b05f3da-b58b-40ff-afe5-9a97333d3a2b.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,6b05f3da-b58b-40ff-afe5-9a97333d3a2b.aspx</id>
    <published>2009-03-28T10:45:36.994-04:00</published>
    <updated>2009-03-30T11:34:53.2966096-04:00</updated>
    <category term="Development" label="Development" scheme="http://blog.philknows.net/CategoryView,category,Development.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm speaking today at the Code Camp in Waltham giving my talk on Speech Recognition
using C#. I've attached the demo files I used. You can download the content <a href="http://blog.philknows.net/content/binary/speechrecognition.zip">here</a>.
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=6b05f3da-b58b-40ff-afe5-9a97333d3a2b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Call for Speakers - Code Camp New Hampshire</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,0aa7d1a8-7ad4-4140-8d60-51f7deed0846.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,0aa7d1a8-7ad4-4140-8d60-51f7deed0846.aspx</id>
    <published>2009-01-06T08:35:57.9444928-05:00</published>
    <updated>2009-01-06T08:35:57.9444928-05:00</updated>
    <category term="Development" label="Development" scheme="http://blog.philknows.net/CategoryView,category,Development.aspx" />
    <category term="DotNet" label="DotNet" scheme="http://blog.philknows.net/CategoryView,category,DotNet.aspx" />
    <category term="Speaking Engagements" label="Speaking Engagements" scheme="http://blog.philknows.net/CategoryView,category,Speaking%2BEngagements.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
The 1st New Hampshire Code Camp is being help Saturday, Feb 28th at <a href="http://www.dwc.edu/">Daniel
Webster College</a>.  Registration is now open at <a href="http://www.thedevcommunity.org/">http://www.thedevcommunity.org/</a>. 
We're looking for developers or DBAs to present at this event.  We're also looking
for component vendors or recruitment firms to sponsor the event with giveaways, or
to help cover food costs. (Contact me - <a href="mailto:phil@denoncourtassociates.com">phil@denoncourtassociates.com</a> or <a href="mailto:ptormey@4square.net">Pat
Tormey</a>)
</p>
        <p>
I love going to code camps, I always learn a lot about technologies that I don't get
to use in my day-to-day life.  It's nice to network with other developers, learn
what problems they're running into and how they're solving them.  The <a href="http://www.thedevcommunity.org/CodeCamps/Manifesto.aspx">manifesto</a> describes
it best: By and For the Developer Community, Always Free, No Fluff...
</p>
        <p>
With the economy in apparent decline, a lot of you developers are looking for ways
to make yourselves more marketable.  According to ToastMasters International,
presentation skills are "crucial to success in the workplace".  Code Camps are
a great way to start refining your speaking skills.  Nobody expects a polished
speaker.  All we're looking for is someone to show us some code, help facilitate
a conversation, or show us something new.  If you get nervous when you speak
in front of people and that's deterring you, partner up with a buddy to deliver the
talk with you. Presentations should go about an hour, and budget time for dialog/Q&amp;A.
</p>
        <p>
Here's how to register to speak at the NH Code Camp:<br />
1) Create an account at <a href="http://thedevcommunity.org">thedevcommunity.org</a>,
or sign into your existing one.<br />
2) Complete a Speaker Registry profile<br />
3) On <a href="http://thedevcommunity.org">thedevcommunity.org</a> 's home page, click
the submit a presentation link next to Code Camp New Hampshire<br />
4) Repeat (as necessary)
</p>
        <p>
Looking forward to seeing you all there...
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=0aa7d1a8-7ad4-4140-8d60-51f7deed0846" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Speaking at Fairfield/Westchester Code Camp this Saturday</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,df1a76cb-5478-4d5c-8e72-e1f32bb35dde.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,df1a76cb-5478-4d5c-8e72-e1f32bb35dde.aspx</id>
    <published>2008-11-06T11:14:19.310125-05:00</published>
    <updated>2008-11-06T11:14:19.310125-05:00</updated>
    <category term="Speaking Engagements" label="Speaking Engagements" scheme="http://blog.philknows.net/CategoryView,category,Speaking%2BEngagements.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'll be giving a talk on implementing Speech Recognition in .NET this Saturday. 
There will be 24 <a href="http://www.fairfieldwestchester.net/">presentations</a> delivered
at the code camp.  Register to attend the code camp <a href="Https://www.clicktoattend.com/invitation.aspx?code=132314">here</a>.
</p>
        <p>
          <strong>Adding Speech Recognition to your Application</strong>
        </p>
        <p>
Since version 3.0, the .NET framework has built in support for speech recognition.
It is easy and straightforward to use. You will learn how to use the speech recognition
capabilities of .NET. We'll talk about the capabilities of the speech recognition
classes. And we talk about best practices and lessons learned. 
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=df1a76cb-5478-4d5c-8e72-e1f32bb35dde" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Static Fields in Derived Types</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,7a8cff86-cd5e-47bc-b041-26ae85908cb4.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,7a8cff86-cd5e-47bc-b041-26ae85908cb4.aspx</id>
    <published>2008-10-08T16:08:08.829-04:00</published>
    <updated>2008-10-08T16:40:59.7289896-04:00</updated>
    <category term="Development" label="Development" scheme="http://blog.philknows.net/CategoryView,category,Development.aspx" />
    <category term="DotNet" label="DotNet" scheme="http://blog.philknows.net/CategoryView,category,DotNet.aspx" />
    <content type="html">&lt;p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
There really is a single instance of a static field per appdomain. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;It
kind of says this in the C# language reference, but not very explicitly. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;This
knocked me around a little because I had assumed that there was a single static field
per type within an appdomain. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;I had a base
type that had a dictionary as a static field and assumed that each class that derived
from it had its own instance of the static field. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Not
so…
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Look at the following test code:
&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align: none"&gt;
&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; System;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; System.Collections.Generic;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; System.Text;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;?xml:namespace prefix = o /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align: none"&gt;
&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;namespace&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; ConsoleApplication3&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Program&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt;&lt;?xml:namespace prefix = st1 /&gt; 
&lt;st1:place w:st="on"&gt;Main&lt;/st1:place&gt;
(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;baseClass&lt;/span&gt;.AStaticValue
= 3;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;inheritedClass&lt;/span&gt;.AStaticValue
= 4;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"baseClass
{0}"&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;baseClass&lt;/span&gt;.AStaticValue);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"inheritedClass
{0}"&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;inheritedClass&lt;/span&gt;.AStaticValue);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadLine();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;baseClass&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&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;int&lt;/span&gt; AStaticValue
= 0;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align: none"&gt;
&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;inheritedClass&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;baseClass&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align: none"&gt;
&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
I expected the results to be 
&lt;br&gt;
baseClass 3&lt;br&gt;
inheritedClass 4
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Instead, the output is&lt;br&gt;
baseClass 4&lt;br&gt;
inheritedClass 4
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
So unless you decorate the field with &lt;a href="http://msdn.microsoft.com/en-us/library/system.threadstaticattribute.aspx"&gt;ThreadStatic&lt;/a&gt; or &lt;a href="http://www.sirius.com/sirius/servlet/MediaPlayer?activity=selectTab&amp;tab=music&amp;stream=thebeat&amp;genre=electronicdanceSIR&amp;category=music&amp;token=85780178a50e61751386f771ec4d53bhttp://msdn.microsoft.com/en-us/library/system.contextstaticattribute.aspx"&gt;ContextStatic&lt;/a&gt; attributes,
static means just one in an appdomain. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Remember
that when you are inheriting from objects that have static fields, there’s only one
instance of that static field.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=7a8cff86-cd5e-47bc-b041-26ae85908cb4" /&gt;</content>
  </entry>
  <entry>
    <title>John Papa is speaking on Silverlight tonight at the NHDN user group</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,e40ad93b-73c1-4e35-850d-efebca05dc8d.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,e40ad93b-73c1-4e35-850d-efebca05dc8d.aspx</id>
    <published>2008-07-24T11:30:22.22125-04:00</published>
    <updated>2008-07-24T11:31:53.22125-04:00</updated>
    <content type="html">&lt;div class=Normal id=dnn_ctr420_HtmlModule_HtmlModule_lblContent&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font face=Arial size=4&gt;Jul&amp;nbsp;24th NOTE: the New Night!&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size=4&gt;&lt;font face=Arial&gt;SilverLight with John Papa.. Special &lt;/font&gt;&lt;a href="http://www.ineta.org/" target=_blank&gt;&lt;font face=Arial&gt;INETA &lt;/font&gt;&lt;/a&gt;&lt;font face=Arial&gt;Event!&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 12pt"&gt;
&lt;span&gt;&lt;font face=Arial size=3&gt;Silverlight enables developers to use their .NET and
XAML skills to develop Rich Internet Applications and to build data driven Silverlight
applications that communicate with multi-tier architectures. &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 12pt"&gt;
&lt;span&gt;&lt;font face=Arial size=3&gt;This session will show how to build Silverlight 2 applications
that communicate with and consume REST services and use LINQ to XML to manage XML
content, show the various data binding techniques, and show how to use WCF to talk
to various middle tier services including custom entity models and the Entity Framework.&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 12pt"&gt;
&lt;font face=Arial&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;a href="http://www.johnpapa.net/"&gt;&lt;span style="COLOR: #0066cc"&gt;&lt;u&gt;&lt;font size=3&gt;John
Papa&lt;/font&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;font size=3&gt; is a &lt;/font&gt;&lt;a href="https://mvp.support.microsoft.com/profile=7D3BBCB7-E956-4730-B3E0-24BD7EAD0D5D"&gt;&lt;span style="COLOR: #0066cc"&gt;&lt;u&gt;&lt;font size=3&gt;Microsoft
C# MVP&lt;/font&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;font size=3&gt;, &lt;/font&gt;&lt;a href="http://www.ineta.org/DesktopDefault.aspx?tabindex=2&amp;amp;tabid=14"&gt;&lt;span style="COLOR: #0066cc"&gt;&lt;u&gt;&lt;font size=3&gt;INETA
speaker&lt;/font&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;font size=3&gt;, consultant with &lt;/font&gt;&lt;a href="http://www.aspsoft.com/"&gt;&lt;span style="COLOR: #0066cc"&gt;&lt;u&gt;&lt;font size=3&gt;ASPSOFT&lt;/font&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;font size=3&gt;,
speaker, author, and trainer who specializes in professional application development
with Microsoft technologies including VB, C#, .NET and SQL Server. &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Arial size=3&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;John
has written over 60 articles and authored several books on data access technologies
including ASP.NET, WPF, Silverlight, ADO.NET, XML, and SQL Server. He can often be
found speaking at industry conferences such as &lt;/font&gt;&lt;a href="http://www.vslive.com/"&gt;&lt;span style="COLOR: #0066cc"&gt;&lt;u&gt;&lt;font size=3&gt;VSLive&lt;/font&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;font size=3&gt; and &lt;/font&gt;&lt;a href="http://www.devconnections.com/"&gt;&lt;span style="COLOR: #0066cc"&gt;&lt;u&gt;&lt;font size=3&gt;DevConnections&lt;/font&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;font size=3&gt;,
and viewed on MSDN Web Casts. &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face=Arial size=3&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;&lt;?XML:NAMESPACE PREFIX = O /&gt;John
is currently working on his upcoming book titled Data Services with Silverlight 2
by O'Reilly due out in December 2008.&lt;O:P&gt;&lt;/O:P&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;Go to &lt;a href="http://www.nhdn.com"&gt;NHDN.com &lt;/a&gt;for
more information
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=e40ad93b-73c1-4e35-850d-efebca05dc8d" /&gt;</content>
  </entry>
  <entry>
    <title>Using Speech in Visual Studio</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,cc1eee3d-00b2-449d-a466-f652d7cb1f3b.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,cc1eee3d-00b2-449d-a466-f652d7cb1f3b.aspx</id>
    <published>2008-07-23T15:13:18.25-04:00</published>
    <updated>2008-07-23T15:37:19.6912081-04:00</updated>
    <category term="DotNet" label="DotNet" scheme="http://blog.philknows.net/CategoryView,category,DotNet.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Part of the .NET 3.0 release was the <a href="http://msdn.microsoft.com/en-us/library/system.speech.recognition.aspx">System.Speech</a> namespace. 
This gives you easy access to powerful speech capabilities.  Text to Speech,
Speech Recognition, and Dictation are all part of this library.  I've tried speech
recognition every 5 years or so, and it has always worked, but it never allowed me
to work faster than just using my keyboard.
</p>
        <p>
As a consultant, I work on a variety of different machines.  Sometimes just my
laptop, sometimes my laptop with an external monitor, and other times a dual monitor
system.  Pictured below is how I set it up on my laptop.  
</p>
        <p>
          <img src="http://blog.philknows.net/content/binary/vsproject.jpg" border="0" />
        </p>
        <p>
Most panels are auto hide so that I can maximize the amount of space to view the code. 
Getting to the solution explorer means I have to take my hands off the keyboard, and
go to the mouse to select the tab.  There are keyboard shortcuts, but I either
don't remember all of them, or they don't work in all types of documents.
</p>
        <p>
Since speech recognition is so easy to use with the system.speech dll, and Visual
Studio addins aren't rocket science either, I built an addin that enables speech recognition
within Visual Studio.  Basically, the addin maps a list of words, that when
recognized, execute a command in the Command Window.  So, when I need to quickly
look at the task list, I don't have to remember the keyboard shortcut, or mouse to
it.  I just speak "Task List".  When I need the toolbox, I say, "Toolbox". 
I didn't get into dictation, because I don't think it is efficient to speak "for space
open parenthesis int i space equal space zero semicolon i less than items
period count semicolon i plus plus close parenthesis open curly brace..."
</p>
        <p>
I uploaded the source and an installer <a href="http://www.codeplex.com/thirdhand">here</a> on
CodePlex.  Because (I think) Visual Studio 2005 only works with addins written
in .NET 2.0, this only works for VS 2008.  Try it out and let me know how it
works.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=cc1eee3d-00b2-449d-a466-f652d7cb1f3b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Did you know true/false are C# operators?</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,6c8991a7-d35c-4809-8d88-29df801c271d.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,6c8991a7-d35c-4809-8d88-29df801c271d.aspx</id>
    <published>2008-06-10T08:04:08.532875-04:00</published>
    <updated>2008-06-10T08:04:08.532875-04:00</updated>
    <category term="Development" label="Development" scheme="http://blog.philknows.net/CategoryView,category,Development.aspx" />
    <category term="DotNet" label="DotNet" scheme="http://blog.philknows.net/CategoryView,category,DotNet.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Me either.  See <a href="http://msdn.microsoft.com/en-us/library/6x6y6z4d(VS.80).aspx" target="_blank">here</a> in
the C# Language Reference.  This means you can overload the operators for your
classes.  The example on MSDN talks about classes that have a true, false, or
null (neither true nor false) state.  You could also create a type that can be
both true <u>and</u> false.
</p>
        <p>
Overloading operators can lead to code that is difficult to read.  You should
only overload operators when it makes sense to do it.  If it is unclear what
“if (myType)” means, don’t overload the operators.
</p>
        <p>
I wrote a small rules engine for a company a while back and this would have been helpful. 
Supplemental rules were implemented as separate classes so that they could be dynamically
strung together in different orders as the business logic changed.
</p>
        <p>
Here’s a contrived sample using the true/false operators:
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">class</span> Customer
{ <span class="kwrd">public</span><span class="kwrd">string</span> CustomerName {
get; set; } <span class="kwrd">public</span><span class="kwrd">string</span> EmailAddress
{ get; set; } <span class="kwrd">public</span><span class="kwrd">decimal</span> OutstandingBalance
{ get; set; } } <span class="kwrd">public</span><span class="kwrd">class</span> CustomerIsGoodRule
{ <span class="kwrd">public</span> CustomerIsGoodRule(Customer customer) { <span class="kwrd">this</span>.Customer
= customer; } Customer Customer { get; set; } <span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">bool</span><span class="kwrd">operator</span><span class="kwrd">true</span>(CustomerIsGoodRule
theCustomer) { <span class="kwrd">return</span> (theCustomer.Customer.OutstandingBalance
&lt;= 0); } <span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">bool</span><span class="kwrd">operator</span><span class="kwrd">false</span>(CustomerIsGoodRule
theCustomer) { <span class="kwrd">return</span> (theCustomer.Customer.OutstandingBalance
&gt; 0); } } <span class="kwrd"> class</span> Program { <span class="kwrd">static</span><span class="kwrd">void</span> Main(<span class="kwrd">string</span>[]
args) { Customer c = <span class="kwrd">new</span> Customer(); c.CustomerName = <span class="str">"Joanne
Doe"</span>; c.EmailAddress = <span class="str">"joannedoe@mailinator.com"</span>;
c.OutstandingBalance = 25; CustomerIsGoodRule cigr = <span class="kwrd">new</span> CustomerIsGoodRule(c); <span class="kwrd">if</span> (cigr)
{ SendNewCatalog(); } <span class="kwrd">else</span> { SendNewStatement(); } } }</pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
One thing to keep in mind is that if you provide a definition for true, you must also
provide one for false.  Also notice that the logical negation operator (!) was
not overriden, so a statement like if (!cigr) fails to compile.
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=6c8991a7-d35c-4809-8d88-29df801c271d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Presentation on AJAX Control Toolkit</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,850a997f-938a-41fc-a0db-f9776699cadb.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,850a997f-938a-41fc-a0db-f9776699cadb.aspx</id>
    <published>2008-06-10T08:00:56.907875-04:00</published>
    <updated>2008-06-10T08:00:56.907875-04:00</updated>
    <category term="Speaking Engagements" label="Speaking Engagements" scheme="http://blog.philknows.net/CategoryView,category,Speaking%2BEngagements.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I haven’t taken the time to upload the materials yet, so thanks to <a href="http://twitter.com/SteveCoombes" target="_blank">Steve
Coombes</a> for hounding me about it.  Here are the files:
</p>
        <p>
          <a href="http://www.denoncourtassociates.com/IntroToTheAJAXControlToolkit.pptx" target="_blank">Powerpoint
Presentation</a>
        </p>
        <p>
          <a href="http://www.denoncourtassociates.com/AjaxToolkitDemo.zip" target="_blank">Source
Files/Demo</a>
        </p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=850a997f-938a-41fc-a0db-f9776699cadb" />
      </div>
    </content>
  </entry>
  <entry>
    <title>New Hampshire .NET User Group is resuming in a new location</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,80aedee8-1632-4de3-9a9b-1e85aee2f600.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,80aedee8-1632-4de3-9a9b-1e85aee2f600.aspx</id>
    <published>2008-05-09T08:21:02.597-04:00</published>
    <updated>2008-05-09T11:25:45.816-04:00</updated>
    <category term="Speaking Engagements" label="Speaking Engagements" scheme="http://blog.philknows.net/CategoryView,category,Speaking%2BEngagements.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <h5>In case you haven't heard...  Notice the new location in Nashua.
</h5>
        <h5> 
</h5>
        <p>
          <a href="http://www.nhdn.com" target="_blank">New Hampshire Dot Net Users Group</a> is
back just in time for Microsoft’s latest releases of Visual Studio
</p>
        <p>
We’ll be meeting In our new home at
</p>
        <p>
6:00-8:30 May 15th
</p>
        <p>
Eaton Richmond Center room 100
</p>
        <p>
          <a href="http://www.dwc.edu">Daniel Webster College</a>
        </p>
        <p>
The Guest Speakers will be
</p>
        <p>
          <strong>
            <a href="http://www.philknows.net">Phil Denoncourt</a>
          </strong>
        </p>
        <p>
          <strong>Overview of the AJAX control toolkit:</strong>
        </p>
        <p>
AJAX is an way to make websites more interactive and responsive.  It's powerful
and easy to use.  The AJAX control toolkit is a set of controls that use AJAX
and wrap common UI scenarios.  Cascading dropdowns, Auto completing textboxes,
in-page popups, hovering menus and dynamically populated textboxes are some of the
controls we'll go over.  No AJAX experience is required.
</p>
        <p>
          <strong>And <a href="http://www.4square.net">Pat Tormey</a> will be presenting</strong>
        </p>
        <p>
What’s new and important in VS 2008 with a little bit of WPF and Expression Suite
</p>
        <p>
Stay tuned to <a href="http://www.nhdn.com">http://www.nhdn.com</a> for details
and register up for notices…
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=80aedee8-1632-4de3-9a9b-1e85aee2f600" />
      </div>
    </content>
  </entry>
  <entry>
    <title>70-561 Microsoft .NET Framework 3.5, ADO.NET Application Development - Section I - Connecting to Data Sources</title>
    <link rel="alternate" type="text/html" href="http://blog.philknows.net/PermaLink,guid,2a3eb8e1-9a7b-4149-8502-8a771328c736.aspx" />
    <id>http://blog.philknows.net/PermaLink,guid,2a3eb8e1-9a7b-4149-8502-8a771328c736.aspx</id>
    <published>2008-04-21T07:50:36.567-04:00</published>
    <updated>2008-04-21T07:51:43.0045-04:00</updated>
    <category term="Certifications" label="Certifications" scheme="http://blog.philknows.net/CategoryView,category,Certifications.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm going to be taking this next week, so I thought I'd post my study notes as I assemble
them.
</p>
        <ul>
          <li>
            <strong>May include but is not limited to: using the ConnectionStringBuilder; leveraging
the ConfigurationManager; protecting the connection string; using Security Support
Provider Interface (SSPI) or SQL Server authentication; correctly addressing the SQL
Server instance; managing “User Instance” and AttachDBfilename</strong>
          </li>
        </ul>
        <p>
The ConnectionStringBuilder objects allow for an abstract way of building a connection
string for ADO.NET.  There is a good <a href="http://blogs.msdn.com/dataaccess/archive/2005/03/30/403926.aspx" target="_blank">writeup</a> on
the data access blog showing basic usage.  There is a <a href="http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder(VS.80).aspx" target="_blank">SqlConnectionStringBuilder</a>, <a href="http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbconnectionstringbuilder(VS.80).aspx" target="_blank">OleDbConnectionStringBuilder</a>, <a href="http://msdn2.microsoft.com/en-us/library/system.data.odbc.odbcconnectionstringbuilder(VS.80).aspx" target="_blank">OdbcConnectionStringBuilder</a>,
and an <a href="http://msdn2.microsoft.com/en-us/library/system.data.oracleclient.oracleconnectionstringbuilder(VS.80).aspx" target="_blank">OracleConnectionStringBuilder</a>. 
</p>
        <p>
The ConfigurationManager has a specific section for storing connection strings and
the <a href="http://msdn2.microsoft.com/en-us/library/system.configuration.configurationmanager.connectionstrings.aspx" target="_blank">ConnectionStrings</a> property
to manipulate them.  See this article on <a href="http://msdn2.microsoft.com/en-us/library/ms254494(VS.80).aspx" target="_blank">MSDN</a> for
more information.  An area that doesn't get much attention is that the Connection
string configuration can be stored in a separate config file.  See the section
titled "Using external configuration files" to see how to use the configSource property. 
</p>
        <p>
MSDN has an <a href="http://msdn2.microsoft.com/en-us/library/89211k9b(VS.80).aspx" target="_blank">article</a> on
securing configuration strings.  An important part to pay attention to is encrypting
connection string information stored in config files.  Scott Forsyth has a <a href="http://weblogs.asp.net/owscott/archive/2005/07/29/421063.aspx" target="_blank">post</a> on
using aspnet_regiis to protect web.config files.  Daruish Tasdighi has an <a href="http://www.codeproject.com/KB/cs/Configuration_File.aspx" target="_blank">article</a> at
codeproject about protecting the contents using the ConfigurationSection.<a href="http://msdn2.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspx" target="_blank">ProtectSection</a> / <a href="http://msdn2.microsoft.com/en-us/library/system.configuration.sectioninformation.unprotectsection.aspx" target="_blank">UnprotectSection</a> methods. 
</p>
        <ul>
          <li>
            <strong>Manage connection objects.<br /></strong>
            <strong>May include but is not limited to: managing connection state, managing
connection pool; implementing persistent data connections; implementing Multiple Active
Result Sets (MARS); encrypting and decrypting data</strong>
          </li>
        </ul>
        <p>
Managing connection state.  I think that is knowing that there are methods on
the connection object to open and close the connection.  The connection will
be closed when the connection object is disposed. 
</p>
        <p>
There is a great <a href="http://weblogs.asp.net/sjoseph/archive/2005/03/23/395601.aspx" target="_blank">post</a> by
Sijin Joseph about connection pooling with all the different connection objects. 
I wasn't aware that there is no connection pooling with ODBC using the managed providers. 
Also interesting was that connection pooling for SQL Server was disabled while debugging
in Visual Studio.  Another thing to be aware of is that when using Integrated
Security for SQL Server, the domain/user is added to the list of things that need
to match for a connection to be reused. 
</p>
        <p>
To have a persistent data connection, you disable connection pooling and keep the
instance of the connection object around.  The connection will remain open until
the connection object is disposed or the close method is used. 
</p>
        <p>
Eric Moreau has a <a href="http://www.emoreau.com/Entries/Articles/2006/11/MARS-and-Asynchronous-ADONet.aspx" target="_blank">post</a> on
using MARS.  It is only supported in the SQL Server and Oracle managed providers.  
</p>
        <p>
You can encrypt/decrypt the data passed from the client back and to the database server
by adding the Encrypt keyword to the connection string for SQL Server or using the <a href="http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.encrypt.aspx" target="_blank">Encrypt</a> property
on the SqlConnectionStringBuilder. 
</p>
        <ul>
          <li>
            <strong>Work with data providers. 
<br />
May include but is not limited to: limitations, behaviors, performance, installation
issues, deployment issues; ODBC, Microsoft OLE DB, SqlClient, managed providers, third-party
providers, native providers</strong>
          </li>
        </ul>
        <p>
I guess this is a nice way of saying, "Know everything about ADO.NET".  Some
of the things I'm aware of are the just because you have a managed provider available,
you still need the native dll libraries.  Oracle, for example.  The client
needs the oracle client libraries in order to connect to Oracle.  I mentioned
some of the shortcomings of ODBC above in regards to pooling.  A great source
for third party data providers can be found at the <a href="http://www.mono-project.com/Database_Access" target="_blank">mono
project</a> (Firebird, MySql, SQLLite, PostgresSQL, Mimer, Sybase..)
</p>
        <ul>
          <li>
            <strong>Connect to a data source by using a generic data access interface. 
<br />
May include but is not limited to: System.Data.Common namespace classes</strong>
          </li>
        </ul>
        <p>
The <a href="http://msdn2.microsoft.com/en-us/library/system.data.common.aspx" target="_blank">common</a> namespace
is the abstract definition for all data providers.  You would use this when you
aren't sure which data provider your application will ultimately use.  Using
the <a href="http://msdn2.microsoft.com/en-us/library/system.data.common.dbproviderfactory.aspx" target="_blank">DbProviderFactory</a> you
can instantiate objects for a specific data provider.   Suman Chakrabarti
has a <a href="http://blogs.msdn.com/sumanc/archive/2006/05/11/592596.aspx" target="_blank">post</a> showing
how to use the DbProviderFactory class. 
</p>
        <ul>
          <li>
            <strong>Handle and diagnose database connection exceptions.<br />
May include but is not limited to: implementing try/catch handlers</strong>
          </li>
        </ul>
        <p>
Joydip Kanjilal has a <a href="http://www.sql-server-performance.com/articles/asp_ado/ado_exceptions_p1.aspx" target="_blank">post</a> on
handling exceptions in ADO.NET.  If you catch a SqlException, you would examine
the number property to determine the root cause of the problem.
</p>
        <p>
 
</p>
        <p>
Next -&gt; Section II Selecting and Querying Data
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=2a3eb8e1-9a7b-4149-8502-8a771328c736" />
      </div>
    </content>
  </entry>
</feed>