<?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>
</feed>