<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Chris Craft's Blog - 30 Day of .NET</title>
    <link>http://www.cjcraft.com/blog/</link>
    <description>A .NET Compact Framework Blog</description>
    <language>en-us</language>
    <copyright>Chris Craft</copyright>
    <lastBuildDate>Tue, 01 Jul 2008 03:24:00 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>cjcraft@mail.com</managingEditor>
    <webMaster>cjcraft@mail.com</webMaster>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=3fca3b7e-4004-42e6-82b4-d7403bf1f261</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,3fca3b7e-4004-42e6-82b4-d7403bf1f261.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,3fca3b7e-4004-42e6-82b4-d7403bf1f261.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3fca3b7e-4004-42e6-82b4-d7403bf1f261</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Tri_139D1/image_6.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="26" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Tri_139D1/image_thumb_2.png" width="98" align="right" border="0" />
          </a>
          <strong>And
there you have it: 30 .NET Windows Mobile Applications in 30 Days!</strong>
        </p>
        <p>
I really liked yesterday’s application, <a href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashDay29CommunityMegaphoneReader.aspx">Community
Megaphone Reader</a>. I think it was because it was a Windows Mobile mashup application.
And we can look forward to many more of these types of applications to come our way.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Tri_139D1/image_4.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Tri_139D1/image_thumb_1.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Trippr</strong>
        </p>
        <p>
You’ve probably already figured out what this application does. That’s right it takes
your current GPS position and pulls back pictures that are geotagged for the area
you are in. <strong>So while you are riding down the road you can flickrscan for photos
taken near you, possibly as close as the block you are on.</strong></p>
        <p>
Really cool idea I think. I’ll probably hook this up to the dashboard of my car and
just let it run while I drive around. It should be lots of fun to just see what I
see.
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
The UI is basic sterile white, but I wanted the photos to be the star of the show
so I went with the one uber true neutral color.
</p>
        <p>
Control are <strong>very</strong> simple: <strong>Update</strong>, <strong>Menu</strong>, <strong>GPS</strong>, <strong>GPS
Start</strong>, <strong>GPS Stop</strong>, <strong>About</strong>, and <strong>Exit</strong>.
Update is the main feature. Any time it is pressed new photos are downloaded.
</p>
        <p>
Again for this project we looked to the <a href="http://msdn.microsoft.com/en-us/library/ms850332.aspx">GPS
Intermediate Driver Reference</a>, it has served us well these 30 days and I really
highly recommend it. If you need to do a Windows Mobile GPS application use this and
you are almost done.
</p>
        <p>
Another great API I found is the <a href="http://www.codeplex.com/FlickrNet">Flickr.Net
API</a>. If you need to connect to Flickr in .NET or .NET Compact Framework this is
great. It does all the heavy lifting for you! I was up and running in minutes!
</p>
        <p>
“The Flickr.Net API is a .Net Library for accessing the Flickr API. Written entirely
in C# it can be accessed from with any .Net language in .Net Framework 1.1, .Net Framework
2.0, .Net Compact Framework 2.0 and <a href="http://www.mono-project.com/">Mono</a>.”
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Update Method</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">if</span> (gpsPosition
== <span style="color: #0000ff">null</span> || !gpsPosition.LatitudeValid || !gpsPosition.LongitudeValid)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span>
              <span style="color: #0000ff">return</span>;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>
              <span style="color: #0000ff">double</span> minimumLongitude
= gpsPosition.Longitude - 1;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">double</span> minimumLatitude
= gpsPosition.Latitude - 1;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #0000ff">double</span> maximumLongitude
= gpsPosition.Longitude + 1;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">double</span> maximumLatitude
= gpsPosition.Latitude + 1;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span>
              <span style="color: #0000ff">string</span> apikey
= <span style="color: #006080">"get_your_own_flickr_key"</span>;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> Flickr
flickr = <span style="color: #0000ff">new</span> Flickr(apikey);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> PhotoSearchOptions
options = <span style="color: #0000ff">new</span> PhotoSearchOptions();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> options.BoundaryBox
= <span style="color: #0000ff">new</span> BoundaryBox(minimumLongitude, minimumLatitude,
maximumLongitude, maximumLatitude);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> options.Extras
|= PhotoSearchExtras.Geo;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span> options.PerPage
= 10;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> options.SortOrder
= PhotoSearchSortOrder.InterestingnessAsc;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span> Photos
photos = flickr.PhotosSearch(options); </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span> StringBuilder
stringBuilder = <span style="color: #0000ff">new</span> StringBuilder();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 20:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 21:</span>
              <span style="color: #0000ff">foreach</span>(Photo
photo <span style="color: #0000ff">in</span> photos.PhotoCollection)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 22:</span> stringBuilder.AppendFormat(<span style="color: #006080">@"&lt;img
src="</span><span style="color: #006080">"{0}"</span><span style="color: #006080">"
style="</span><span style="color: #006080">"border: 1px black solid; padding:
0px; margin: 1px"</span><span style="color: #006080">" /&gt;"</span>,
photo.ThumbnailUrl);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 23:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 24:</span> webBrowser.DocumentText
= stringBuilder.ToString();</pre>
          </div>
        </div>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
Obviously this needs an auto-update feature and settings for those of use who will
use it on the road. If I click on a picture I’d love to see a larger view of it as
well. and a details listing telling me more about the photo would be great.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/Trippr.CAB">trippr.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/Trippr.zip">trippr.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Thank You:</strong>
        </p>
        <p>
I appreciate everyone’s encouragement and feedback. This project would not have been
a success without all of you. Keep an out there’s more to come in the future. <img alt="Wink" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/wink_smile.gif" /></p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=3fca3b7e-4004-42e6-82b4-d7403bf1f261" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; Day 30: Trippr</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,3fca3b7e-4004-42e6-82b4-d7403bf1f261.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/07/01/30DaysOfNETWindowsMobileApplicationsNdashDay30Trippr.aspx</link>
      <pubDate>Tue, 01 Jul 2008 03:24:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Tri_139D1/image_6.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="26" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Tri_139D1/image_thumb_2.png" width="98" align="right" border="0" /&gt;&lt;/a&gt; &lt;strong&gt;And
there you have it: 30 .NET Windows Mobile Applications in 30 Days!&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I really liked yesterday’s application, &lt;a href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashDay29CommunityMegaphoneReader.aspx"&gt;Community
Megaphone Reader&lt;/a&gt;. I think it was because it was a Windows Mobile mashup application.
And we can look forward to many more of these types of applications to come our way.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Tri_139D1/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Tri_139D1/image_thumb_1.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Trippr&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
You’ve probably already figured out what this application does. That’s right it takes
your current GPS position and pulls back pictures that are geotagged for the area
you are in. &lt;strong&gt;So while you are riding down the road you can flickrscan for photos
taken near you, possibly as close as the block you are on.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Really cool idea I think. I’ll probably hook this up to the dashboard of my car and
just let it run while I drive around. It should be lots of fun to just see what I
see.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The UI is basic sterile white, but I wanted the photos to be the star of the show
so I went with the one uber true neutral color.
&lt;/p&gt;
&lt;p&gt;
Control are &lt;strong&gt;very&lt;/strong&gt; simple: &lt;strong&gt;Update&lt;/strong&gt;, &lt;strong&gt;Menu&lt;/strong&gt;, &lt;strong&gt;GPS&lt;/strong&gt;, &lt;strong&gt;GPS
Start&lt;/strong&gt;, &lt;strong&gt;GPS Stop&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;, and &lt;strong&gt;Exit&lt;/strong&gt;.
Update is the main feature. Any time it is pressed new photos are downloaded.
&lt;/p&gt;
&lt;p&gt;
Again for this project we looked to the &lt;a href="http://msdn.microsoft.com/en-us/library/ms850332.aspx"&gt;GPS
Intermediate Driver Reference&lt;/a&gt;, it has served us well these 30 days and I really
highly recommend it. If you need to do a Windows Mobile GPS application use this and
you are almost done.
&lt;/p&gt;
&lt;p&gt;
Another great API I found is the &lt;a href="http://www.codeplex.com/FlickrNet"&gt;Flickr.Net
API&lt;/a&gt;. If you need to connect to Flickr in .NET or .NET Compact Framework this is
great. It does all the heavy lifting for you! I was up and running in minutes!
&lt;/p&gt;
&lt;p&gt;
“The Flickr.Net API is a .Net Library for accessing the Flickr API. Written entirely
in C# it can be accessed from with any .Net language in .Net Framework 1.1, .Net Framework
2.0, .Net Compact Framework 2.0 and &lt;a href="http://www.mono-project.com/"&gt;Mono&lt;/a&gt;.”
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update Method&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (gpsPosition
== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; || !gpsPosition.LatitudeValid || !gpsPosition.LongitudeValid)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;double&lt;/span&gt; minimumLongitude
= gpsPosition.Longitude - 1;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;double&lt;/span&gt; minimumLatitude
= gpsPosition.Latitude - 1;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;double&lt;/span&gt; maximumLongitude
= gpsPosition.Longitude + 1;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;double&lt;/span&gt; maximumLatitude
= gpsPosition.Latitude + 1;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; apikey
= &lt;span style="color: #006080"&gt;&amp;quot;get_your_own_flickr_key&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; Flickr
flickr = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Flickr(apikey);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; PhotoSearchOptions
options = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PhotoSearchOptions();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; options.BoundaryBox
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BoundaryBox(minimumLongitude, minimumLatitude,
maximumLongitude, maximumLatitude);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; options.Extras
|= PhotoSearchExtras.Geo;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; options.PerPage
= 10;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; options.SortOrder
= PhotoSearchSortOrder.InterestingnessAsc;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; Photos
photos = flickr.PhotosSearch(options); &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt; StringBuilder
stringBuilder = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 20:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 21:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;(Photo
photo &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; photos.PhotoCollection)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 22:&lt;/span&gt; stringBuilder.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;img
src=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;{0}&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;
style=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;border: 1px black solid; padding:
0px; margin: 1px&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot; /&amp;gt;&amp;quot;&lt;/span&gt;,
photo.ThumbnailUrl);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 23:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 24:&lt;/span&gt; webBrowser.DocumentText
= stringBuilder.ToString();&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Obviously this needs an auto-update feature and settings for those of use who will
use it on the road. If I click on a picture I’d love to see a larger view of it as
well. and a details listing telling me more about the photo would be great.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/Trippr.CAB"&gt;trippr.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/Trippr.zip"&gt;trippr.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Thank You:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I appreciate everyone’s encouragement and feedback. This project would not have been
a success without all of you. Keep an out there’s more to come in the future. &lt;img alt="Wink" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/wink_smile.gif" /&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=3fca3b7e-4004-42e6-82b4-d7403bf1f261" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,3fca3b7e-4004-42e6-82b4-d7403bf1f261.aspx</comments>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=75ebe38e-2734-4380-9dcf-8ddba3cb94dd</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,75ebe38e-2734-4380-9dcf-8ddba3cb94dd.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,75ebe38e-2734-4380-9dcf-8ddba3cb94dd.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=75ebe38e-2734-4380-9dcf-8ddba3cb94dd</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsTheRoadA_138C2/image_2.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="248" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsTheRoadA_138C2/image_thumb.png" width="304" align="right" border="0" />
          </a>We
only have one more day left in our 30 days of .NET [Windows Mobile Applications].
Where do we go from here?
</p>
        <p>
I’m really happy with the 30 Days of .NET so I do think I will continue that in one
format or another for some time. It’s been a blast. And everyone knows my passion
for Windows Mobile programming so we keep finding way to work that in there as well.
</p>
        <p>
I haven’t quite decided what I’ll do for next month but I’m sure it’ll only get better
as we move forward.
</p>
        <p>
There have been a lot of request for applications that haven’t made it on deck yet,
and obviously they aren’t all going to get done tomorrow. But I think I’ll be able
to throw in some Bonus Day of .NET or Return of Day of .NET and knock some of them
out over time.
</p>
        <p>
My goal is to take all the existing content and clean it up some and make more through
and detailed learning materials to really help beginners take off with Windows Mobile.
</p>
        <p>
Hope you’ll join me on the road ahead…
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=75ebe38e-2734-4380-9dcf-8ddba3cb94dd" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; The Road Ahead</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,75ebe38e-2734-4380-9dcf-8ddba3cb94dd.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashTheRoadAhead.aspx</link>
      <pubDate>Mon, 30 Jun 2008 06:10:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsTheRoadA_138C2/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="248" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsTheRoadA_138C2/image_thumb.png" width="304" align="right" border="0" /&gt;&lt;/a&gt;We
only have one more day left in our 30 days of .NET [Windows Mobile Applications].
Where do we go from here?
&lt;/p&gt;
&lt;p&gt;
I’m really happy with the 30 Days of .NET so I do think I will continue that in one
format or another for some time. It’s been a blast. And everyone knows my passion
for Windows Mobile programming so we keep finding way to work that in there as well.
&lt;/p&gt;
&lt;p&gt;
I haven’t quite decided what I’ll do for next month but I’m sure it’ll only get better
as we move forward.
&lt;/p&gt;
&lt;p&gt;
There have been a lot of request for applications that haven’t made it on deck yet,
and obviously they aren’t all going to get done tomorrow. But I think I’ll be able
to throw in some Bonus Day of .NET or Return of Day of .NET and knock some of them
out over time.
&lt;/p&gt;
&lt;p&gt;
My goal is to take all the existing content and clean it up some and make more through
and detailed learning materials to really help beginners take off with Windows Mobile.
&lt;/p&gt;
&lt;p&gt;
Hope you’ll join me on the road ahead…
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=75ebe38e-2734-4380-9dcf-8ddba3cb94dd" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,75ebe38e-2734-4380-9dcf-8ddba3cb94dd.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>miscellaneous</category>
      <category>personal</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=94a2ddcb-3417-4c31-afc7-d1705492ff1b</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,94a2ddcb-3417-4c31-afc7-d1705492ff1b.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,94a2ddcb-3417-4c31-afc7-d1705492ff1b.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=94a2ddcb-3417-4c31-afc7-d1705492ff1b</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Wow, it’s hard to believe the month is almost over already. So far we have 29 applications
done in 29 days! Thank you for all your encouragement.
</p>
        <p>
If you missed the week one recap here it is: <a href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsWeekOne.aspx">30
Days of .NET [Windows Mobile Applications] - Week One</a>.
</p>
        <p>
If you missed the week two recap here it is: <a href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsWeekTwo.aspx">30
Days of .NET [Windows Mobile Applications] - Week Two</a>.
</p>
        <p>
If you missed the week three recap here it is: <a href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsWeekThree.aspx">30
Days of .NET [Windows Mobile Applications] - Week Three</a>.
</p>
        <p>
What’s your favorite?
</p>
        <table cellspacing="0" cellpadding="2" width="689" border="0">
          <tbody>
            <tr>
              <td valign="top" width="170">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_10.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_4.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="175">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_2.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb.png" width="155" align="left" border="0" />
                </a> </td>
              <td valign="top" width="171">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_4.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_1.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="171">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_8.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_3.png" width="155" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="170">
                <a href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsDay22GPSClock.aspx">GPS
Clock</a>
                <a href="http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay23MobileInfo.aspx">
                </a>
              </td>
              <td valign="top" width="175">
                <a href="http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay23MobileInfo.aspx">MobileInfo</a>
                <a href="http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx">
                </a>
              </td>
              <td valign="top" width="171">
                <a href="http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx">Mobile
Flashlight</a>
              </td>
              <td valign="top" width="171">
                <a href="http://www.cjcraft.com/blog/2008/06/26/30DaysOfNETWindowsMobileApplicationsNdashDay25SmartDial.aspx">SmartDial</a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
Let see we have a time utility, and device information, call blocker, and lots more!
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <table cellspacing="0" cellpadding="2" width="550" border="0">
          <tbody>
            <tr>
              <td valign="top" width="137">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_12.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_5.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="137">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_14.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_6.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="137">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_16.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_7.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="137">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image31_1.png">
                  <img title="image_thumb15[4]" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image_thumb15[4]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb15%5B4%5D_cf1ecfce-3ddb-45d0-9210-42c4c9aa584c.png" width="156" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="137">
                <a href="http://www.cjcraft.com/blog/2008/06/27/30DaysOfNETWindowsMobileApplicationsNdashDay26GeoCash.aspx">GeoCash</a>
              </td>
              <td valign="top" width="137">
                <a href="http://www.cjcraft.com/blog/2008/06/28/30DaysOfNETWindowsMobileApplicationsNdashDay27Repeatr.aspx">Repeatr</a>
              </td>
              <td valign="top" width="137">
                <a href="http://www.cjcraft.com/blog/2008/06/28/30DaysOfNETWindowsMobileApplicationsNdashDay28CallBlocker.aspx">CallBlocker</a>
              </td>
              <td valign="top" width="137">
                <a href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashDay29CommunityMegaphoneReader.aspx">What
will be next?</a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Got an idea? Got some feedback? Share it? Thanks!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Week Four</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,94a2ddcb-3417-4c31-afc7-d1705492ff1b.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsWeekFour.aspx</link>
      <pubDate>Mon, 30 Jun 2008 05:06:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Wow, it’s hard to believe the month is almost over already. So far we have 29 applications
done in 29 days! Thank you for all your encouragement.
&lt;/p&gt;
&lt;p&gt;
If you missed the week one recap here it is: &lt;a href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsWeekOne.aspx"&gt;30
Days of .NET [Windows Mobile Applications] - Week One&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
If you missed the week two recap here it is: &lt;a href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsWeekTwo.aspx"&gt;30
Days of .NET [Windows Mobile Applications] - Week Two&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
If you missed the week three recap here it is: &lt;a href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsWeekThree.aspx"&gt;30
Days of .NET [Windows Mobile Applications] - Week Three&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
What’s your favorite?
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="689" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="170"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_10.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_4.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="175"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb.png" width="155" align="left" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="171"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_1.png" width="155" align="left" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="171"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_8.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_3.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="170"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsDay22GPSClock.aspx"&gt;GPS
Clock&lt;/a&gt;&lt;a href="http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay23MobileInfo.aspx"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="175"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay23MobileInfo.aspx"&gt;MobileInfo&lt;/a&gt;&lt;a href="http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="171"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx"&gt;Mobile
Flashlight&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="171"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/26/30DaysOfNETWindowsMobileApplicationsNdashDay25SmartDial.aspx"&gt;SmartDial&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Let see we have a time utility, and device information, call blocker, and lots more!
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="550" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="137"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_12.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_5.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="137"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_14.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_6.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="137"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_16.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb_7.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="137"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image31_1.png"&gt;&lt;img title="image_thumb15[4]" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image_thumb15[4]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekFour_1273D/image_thumb15%5B4%5D_cf1ecfce-3ddb-45d0-9210-42c4c9aa584c.png" width="156" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="137"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/27/30DaysOfNETWindowsMobileApplicationsNdashDay26GeoCash.aspx"&gt;GeoCash&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="137"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/28/30DaysOfNETWindowsMobileApplicationsNdashDay27Repeatr.aspx"&gt;Repeatr&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="137"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/28/30DaysOfNETWindowsMobileApplicationsNdashDay28CallBlocker.aspx"&gt;CallBlocker&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="137"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashDay29CommunityMegaphoneReader.aspx"&gt;What
will be next?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Got an idea? Got some feedback? Share it? Thanks!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,94a2ddcb-3417-4c31-afc7-d1705492ff1b.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=e9c5d22b-57e0-4dd1-b1df-7ae6fac7d385</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,e9c5d22b-57e0-4dd1-b1df-7ae6fac7d385.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,e9c5d22b-57e0-4dd1-b1df-7ae6fac7d385.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e9c5d22b-57e0-4dd1-b1df-7ae6fac7d385</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
          <strong>Only One Day Left…</strong>
        </p>
        <p>
Not too long ago <a href="http://pagebrooks.com/">Page Brooks</a> and myself made
the three and a half hour drive from Florence, SC to Greensboro, NC to attend the <a href="http://live.ineta.org/blog/2008/06/06/CarolinaCommunityLeadershipSummit08.aspx">Ineta
Carolina Community Leadership Summit '08</a>. This was a great event and there we
meet a lot of the local Ineta user group leaders. We also meet <a href="http://blogs.msdn.com/gduthie/">Andrew
Duthie</a>, aka <a href="http://blogs.msdn.com/gduthie/">DEvHammer</a>. One issue
that rose to the top of things we wanted to work on improving at the leadership summit
was awareness of events that are occurring in the local regional area. That’s when
Andrew told everyone about the project he has been working on: <a href="http://www.communitymegaphone.com/">Community
Megaphone</a>.
</p>
        <p>
I love have information at my fingertips, so I decided to write a tie-in application:
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Com_1207D/image_2.png">
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="179" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Com_1207D/image_thumb.png" width="258" align="right" border="0" />
          </a>
        </p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Com_1207D/image_4.png">
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Com_1207D/image_thumb_1.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Community Megaphone Reader </strong>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Basically, this application connects to the Community Megaphone RSS feed and pulls
down event data. Then it takes your current GPS position and calculates your distance
from each event. Finally, it takes all the events and sorts then so you can find the
event that is the closest to you. This is a great application for the traveling .NET
geek. Where ever you are you can find great .NET events to attend.
</p>
        <p>
The UI is paying homage to Andrew’s Community Megaphone site. I tried to match the
basic colors to keep it familiar. The hyperlinks are active and will take you the
event’s page on Community Megaphone. The menu only has a few options: <strong>Refresh</strong>, <strong>About</strong>,
and <strong>Exit</strong>.
</p>
        <p>
An application like this is really exciting, because it is tying the world of mobile
together with the world wide web.
</p>
        <p>
These types of mashup applications will contitue to take of for years.
</p>
        <p>
          <strong>LoadRss Method</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 49.72%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">static</span> DataSet
LoadRss(<span style="color: #0000ff">string</span> requestUriString)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> HttpWebRequest
feed = HttpWebRequest.Create(requestUriString) <span style="color: #0000ff">as</span> HttpWebRequest;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> StreamReader
streamReader = <span style="color: #0000ff">new</span> StreamReader(feed.GetResponse().GetResponseStream());</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #0000ff">string</span> rssXml
= streamReader.ReadToEnd();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> rssXml
= rssXml.Replace(<span style="color: #006080">@"&lt;?xml version="</span><span style="color: #006080">"1.0"</span><span style="color: #006080">"
encoding="</span><span style="color: #006080">"utf-8"</span><span style="color: #006080">"?&gt;"</span>, <span style="color: #0000ff">string</span>.Empty);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> StringReader
stringReader = <span style="color: #0000ff">new</span> StringReader(rssXml);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> DataSet
dataSet = <span style="color: #0000ff">new</span> DataSet();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> dataSet.ReadXml(stringReader);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span>
              <span style="color: #0000ff">return</span> dataSet;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span> }</pre>
          </div>
        </div>
        <p>
 
</p>
        <p>
          <strong>GetEvents Method</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">static</span> List&lt;Item&gt;
GetEvents(DataSet dataSet, GpsPosition gpsPosition)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> List&lt;Item&gt;
items = <span style="color: #0000ff">new</span> List&lt;Item&gt;();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">foreach</span> (DataRow
dataRow <span style="color: #0000ff">in</span> dataSet.Tables[<span style="color: #006080">"item"</span>].Rows)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> Item
item = <span style="color: #0000ff">new</span> Item();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> item.Title
= (<span style="color: #0000ff">string</span>)dataRow[<span style="color: #006080">"title"</span>];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> item.Description
= (<span style="color: #0000ff">string</span>)dataRow[<span style="color: #006080">"description"</span>];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> item.Link
= (<span style="color: #0000ff">string</span>)dataRow[<span style="color: #006080">"link"</span>];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> item.PublishDate
= DateTime.Parse((<span style="color: #0000ff">string</span>)dataRow[<span style="color: #006080">"pubDate"</span>]);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> item.Latitude
= Double.Parse((<span style="color: #0000ff">string</span>)dataRow[<span style="color: #006080">"lat"</span>]);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> item.Longitude
= Double.Parse((<span style="color: #0000ff">string</span>)dataRow[<span style="color: #006080">"long"</span>]);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span>
              <span style="color: #0000ff">if</span>(gpsPosition.LatitudeValid
&amp;&amp; gpsPosition.LongitudeValid)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> item.Distance
= GeoCodeCalc.CalcDistance(gpsPosition.Latitude, gpsPosition.Longitude, item.Latitude,
item.Longitude);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span> items.Add(item);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 20:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 21:</span> items.Sort(<span style="color: #0000ff">delegate</span>(Item
item1, Item item2)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 22:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 23:</span>
              <span style="color: #0000ff">return</span> item1.Distance.CompareTo(item2.Distance);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 24:</span> });</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 25:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 26:</span>
              <span style="color: #0000ff">return</span> items;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 27:</span> }</pre>
          </div>
        </div>
        <p>
          <strong>Display Events Method</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">static</span>
              <span style="color: #0000ff">string</span> DisplayEvents(List&lt;Item&gt;
events)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> StringBuilder
stringBuilder = <span style="color: #0000ff">new</span> StringBuilder();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">foreach</span> (Item
item <span style="color: #0000ff">in</span> events)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> stringBuilder.Append(<span style="color: #006080">@"&lt;span
style="</span><span style="color: #006080">"color: #FFFFFF;font-weight:bold;"</span><span style="color: #006080">"&gt;"</span>);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> stringBuilder.AppendFormat(<span style="color: #006080">@"&lt;a
href="</span><span style="color: #006080">"{0}"</span><span style="color: #006080">"
style="</span><span style="color: #006080">"color: #DBB94F;"</span><span style="color: #006080">"&gt;{1}&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;"</span>,
item.Link, item.Title);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> stringBuilder.AppendFormat(<span style="color: #006080">@"{0}&lt;br/&gt;&lt;br/&gt;"</span>,
item.Description);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> stringBuilder.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Distance:
&lt;span style="</span><span style="color: #006080">"color: #DBB94F;"</span><span style="color: #006080">"&gt;{0}
miles&lt;/span&gt;&lt;/b&gt;&lt;br/&gt;"</span>, item.Distance.ToString(<span style="color: #006080">"0.00"</span>));</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span>
              <span style="color: #008000">//
stringBuilder.AppendFormat(@"&lt;b&gt;{0}&lt;/b&gt;&lt;br/&gt;", item.PublishDate);</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span>
              <span style="color: #008000">//
stringBuilder.AppendFormat(@"{0}&lt;br/&gt;", item.Latitude);</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span>
              <span style="color: #008000">//
stringBuilder.AppendFormat(@"{0}&lt;br/&gt;", item.Longitude);</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> stringBuilder.AppendFormat(<span style="color: #006080">@"&lt;br/&gt;&lt;br/&gt;"</span>);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span> stringBuilder.Append(<span style="color: #006080">@"&lt;/span&gt;"</span>);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span>
              <span style="color: #0000ff">return</span> stringBuilder.ToString();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span> }</pre>
          </div>
        </div>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
Andrew recently added iCalendar file support to Community Megaphone. This would be
a great feature to add to a Windows Mobile application, and it is totally doable.
The HTML could be a little more fancy maybe even use a few 16x16 fonts for a little
personality.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/CommunityMegaphoneReader.CAB">communityMegaphoneReader.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/CommunityMegaphoneReader.zip">communityMegaphoneReader.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? Time’s running out only one more day.
Be sure to get your ideas in soon!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e9c5d22b-57e0-4dd1-b1df-7ae6fac7d385" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; Day 29: Community Megaphone Reader</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,e9c5d22b-57e0-4dd1-b1df-7ae6fac7d385.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashDay29CommunityMegaphoneReader.aspx</link>
      <pubDate>Mon, 30 Jun 2008 04:31:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Only One Day Left…&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Not too long ago &lt;a href="http://pagebrooks.com/"&gt;Page Brooks&lt;/a&gt; and myself made
the three and a half hour drive from Florence, SC to Greensboro, NC to attend the &lt;a href="http://live.ineta.org/blog/2008/06/06/CarolinaCommunityLeadershipSummit08.aspx"&gt;Ineta
Carolina Community Leadership Summit '08&lt;/a&gt;. This was a great event and there we
meet a lot of the local Ineta user group leaders. We also meet &lt;a href="http://blogs.msdn.com/gduthie/"&gt;Andrew
Duthie&lt;/a&gt;, aka &lt;a href="http://blogs.msdn.com/gduthie/"&gt;DEvHammer&lt;/a&gt;. One issue
that rose to the top of things we wanted to work on improving at the leadership summit
was awareness of events that are occurring in the local regional area. That’s when
Andrew told everyone about the project he has been working on: &lt;a href="http://www.communitymegaphone.com/"&gt;Community
Megaphone&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I love have information at my fingertips, so I decided to write a tie-in application:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Com_1207D/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="179" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Com_1207D/image_thumb.png" width="258" align="right" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Com_1207D/image_4.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay29Com_1207D/image_thumb_1.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Community Megaphone Reader &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Basically, this application connects to the Community Megaphone RSS feed and pulls
down event data. Then it takes your current GPS position and calculates your distance
from each event. Finally, it takes all the events and sorts then so you can find the
event that is the closest to you. This is a great application for the traveling .NET
geek. Where ever you are you can find great .NET events to attend.
&lt;/p&gt;
&lt;p&gt;
The UI is paying homage to Andrew’s Community Megaphone site. I tried to match the
basic colors to keep it familiar. The hyperlinks are active and will take you the
event’s page on Community Megaphone. The menu only has a few options: &lt;strong&gt;Refresh&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;,
and &lt;strong&gt;Exit&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
An application like this is really exciting, because it is tying the world of mobile
together with the world wide web.
&lt;/p&gt;
&lt;p&gt;
These types of mashup applications will contitue to take of for years.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;LoadRss Method&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 49.72%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; DataSet
LoadRss(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; requestUriString)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; HttpWebRequest
feed = HttpWebRequest.Create(requestUriString) &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; HttpWebRequest;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; StreamReader
streamReader = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StreamReader(feed.GetResponse().GetResponseStream());&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; rssXml
= streamReader.ReadToEnd();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; rssXml
= rssXml.Replace(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;?xml version=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;
encoding=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;?&amp;gt;&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; StringReader
stringReader = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringReader(rssXml);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; DataSet
dataSet = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DataSet();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; dataSet.ReadXml(stringReader);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; dataSet;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;GetEvents Method&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; List&amp;lt;Item&amp;gt;
GetEvents(DataSet dataSet, GpsPosition gpsPosition)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; List&amp;lt;Item&amp;gt;
items = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (DataRow
dataRow &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; dataSet.Tables[&lt;span style="color: #006080"&gt;&amp;quot;item&amp;quot;&lt;/span&gt;].Rows)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; Item
item = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Item();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; item.Title
= (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)dataRow[&lt;span style="color: #006080"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; item.Description
= (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)dataRow[&lt;span style="color: #006080"&gt;&amp;quot;description&amp;quot;&lt;/span&gt;];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; item.Link
= (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)dataRow[&lt;span style="color: #006080"&gt;&amp;quot;link&amp;quot;&lt;/span&gt;];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; item.PublishDate
= DateTime.Parse((&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)dataRow[&lt;span style="color: #006080"&gt;&amp;quot;pubDate&amp;quot;&lt;/span&gt;]);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; item.Latitude
= Double.Parse((&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)dataRow[&lt;span style="color: #006080"&gt;&amp;quot;lat&amp;quot;&lt;/span&gt;]);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; item.Longitude
= Double.Parse((&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)dataRow[&lt;span style="color: #006080"&gt;&amp;quot;long&amp;quot;&lt;/span&gt;]);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(gpsPosition.LatitudeValid
&amp;amp;&amp;amp; gpsPosition.LongitudeValid)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; item.Distance
= GeoCodeCalc.CalcDistance(gpsPosition.Latitude, gpsPosition.Longitude, item.Latitude,
item.Longitude);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; items.Add(item);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 20:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 21:&lt;/span&gt; items.Sort(&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;(Item
item1, Item item2)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 22:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 23:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; item1.Distance.CompareTo(item2.Distance);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 24:&lt;/span&gt; });&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 25:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 26:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; items;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 27:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Display Events Method&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; DisplayEvents(List&amp;lt;Item&amp;gt;
events)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; StringBuilder
stringBuilder = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (Item
item &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; events)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; stringBuilder.Append(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;span
style=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;color: #FFFFFF;font-weight:bold;&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; stringBuilder.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;a
href=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;{0}&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;
style=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;color: #DBB94F;&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;&amp;gt;{1}&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;,
item.Link, item.Title);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; stringBuilder.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;{0}&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;,
item.Description);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; stringBuilder.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Distance:
&amp;lt;span style=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;color: #DBB94F;&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;&amp;gt;{0}
miles&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;, item.Distance.ToString(&lt;span style="color: #006080"&gt;&amp;quot;0.00&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
stringBuilder.AppendFormat(@&amp;quot;&amp;lt;b&amp;gt;{0}&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;, item.PublishDate);&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
stringBuilder.AppendFormat(@&amp;quot;{0}&amp;lt;br/&amp;gt;&amp;quot;, item.Latitude);&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
stringBuilder.AppendFormat(@&amp;quot;{0}&amp;lt;br/&amp;gt;&amp;quot;, item.Longitude);&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; stringBuilder.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; stringBuilder.Append(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; stringBuilder.ToString();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Andrew recently added iCalendar file support to Community Megaphone. This would be
a great feature to add to a Windows Mobile application, and it is totally doable.
The HTML could be a little more fancy maybe even use a few 16x16 fonts for a little
personality.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/CommunityMegaphoneReader.CAB"&gt;communityMegaphoneReader.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/CommunityMegaphoneReader.zip"&gt;communityMegaphoneReader.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? Time’s running out only one more day.
Be sure to get your ideas in soon!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e9c5d22b-57e0-4dd1-b1df-7ae6fac7d385" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,e9c5d22b-57e0-4dd1-b1df-7ae6fac7d385.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>INETA</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=0efa1259-75a9-41f0-8fd4-15e4b73b1a96</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,0efa1259-75a9-41f0-8fd4-15e4b73b1a96.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,0efa1259-75a9-41f0-8fd4-15e4b73b1a96.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0efa1259-75a9-41f0-8fd4-15e4b73b1a96</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
          <strong>Only 2 Days Left…</strong>
        </p>
        <p>
Today’s application is <strong>CallBlock</strong>. It is designed to watch incoming
calls, and check and see if they match any on the block phone numbers list. If they
do match then the phone is “blocked”.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay27Cal_B880/image_2.png">
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay27Cal_B880/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>CallBlock</strong>
        </p>
        <p>
The first thing you should notice is the flashy logo at the top of the form. I create
this logo with an online 3D logo generator. The one simple touch adds a lot of professional
polish to the application. I really like red and white so I didn’t change the background
color this time. But I am starting to wish I had. It seems a little “blah” to me now.
</p>
        <p>
Next we have our phone number input text box. The user enters the phone number here,
and presses the <strong>Block</strong> menu item to add it to the block number list
below. On the main menu we also have options to <strong>Unblock</strong>, and <strong>Unblock
All</strong>. And we have our almost universal <strong>About</strong> and <strong>Exit</strong> menu
items.
</p>
        <p>
There are two main pieces to this application. One part is the State and Notification
Broker code to give us an event to catch incoming phone calls.
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
I actually got myself painted into a corner, I assumed you could just programmatically
ignore of phone call but it isn’t that simple. Fortunately, a good friend of mine, <a href="http://ilovevb.net/Web/blogs/vbmobile/archive/2008/02/15/0wn-ur-phone-taking-back-control-of-your-mobile-phone.aspx">Lou
Vega</a>, came up with a very slick workaround for this. And that is the second part
which is the <strong>keybd_event</strong> method that allows us to send keypresses
to the OS to <strong>Ignore</strong> the phone call.
</p>
        <p>
          <strong>CallBlock Core Code</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 54.53%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">const</span>
              <span style="color: #0000ff">int</span> KEYEVENTF_KEYDOWN
= 0x0;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span>
              <span style="color: #0000ff">const</span>
              <span style="color: #0000ff">int</span> KEYEVENTF_KEYUP
= 0x2;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> [DllImport(<span style="color: #006080">"coredll.dll"</span>,
EntryPoint = <span style="color: #006080">"keybd_event"</span>, SetLastError
= <span style="color: #0000ff">true</span>)]</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">internal</span>
              <span style="color: #0000ff">static</span>
              <span style="color: #0000ff">extern</span>
              <span style="color: #0000ff">void</span> keybd_event(<span style="color: #0000ff">byte</span> bVk, <span style="color: #0000ff">byte</span> bScan, <span style="color: #0000ff">int</span> dwFlags, <span style="color: #0000ff">int</span> dwExtraInfo);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> SystemState
phoneIncomingCall = <span style="color: #0000ff">new</span> SystemState(SystemProperty.PhoneIncomingCall);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> frmMain_Load(<span style="color: #0000ff">object</span> sender,
EventArgs e)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> phoneIncomingCall.Changed
+= <span style="color: #0000ff">new</span> ChangeEventHandler(phoneIncomingCall_Changed);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span>
              <span style="color: #0000ff">void</span> phoneIncomingCall_Changed(<span style="color: #0000ff">object</span> sender,
ChangeEventArgs args)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span>
              <span style="color: #0000ff">string</span> phoneNumber
= RemoveText(SystemState.PhoneIncomingCallerNumber);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span>
              <span style="color: #0000ff">if</span>(listBoxBlockedNumbers.Items.Contains(phoneNumber))</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span> keybd_event(115,
0, KEYEVENTF_KEYDOWN, 0);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 20:</span> keybd_event(115,
0, KEYEVENTF_KEYUP, 0);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 21:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 22:</span> }</pre>
          </div>
        </div>
        <p>
 
</p>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
It would be easy to add support for blocking SMS text messages as well. We’ve done
all the code for this already in previous applications. Also the application could
really use a persistent data store to remember number to block in case the user closes
the application. It would be nice to allow user formatting of entered phone numbers
for increased readability.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/CallBlock.CAB">callBlock.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/CallBlock.zip">callBlock.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=0efa1259-75a9-41f0-8fd4-15e4b73b1a96" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; Day 28: CallBlocker</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,0efa1259-75a9-41f0-8fd4-15e4b73b1a96.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/28/30DaysOfNETWindowsMobileApplicationsNdashDay28CallBlocker.aspx</link>
      <pubDate>Sat, 28 Jun 2008 21:07:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Only 2 Days Left…&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Today’s application is &lt;strong&gt;CallBlock&lt;/strong&gt;. It is designed to watch incoming
calls, and check and see if they match any on the block phone numbers list. If they
do match then the phone is “blocked”.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay27Cal_B880/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay27Cal_B880/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;CallBlock&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The first thing you should notice is the flashy logo at the top of the form. I create
this logo with an online 3D logo generator. The one simple touch adds a lot of professional
polish to the application. I really like red and white so I didn’t change the background
color this time. But I am starting to wish I had. It seems a little “blah” to me now.
&lt;/p&gt;
&lt;p&gt;
Next we have our phone number input text box. The user enters the phone number here,
and presses the &lt;strong&gt;Block&lt;/strong&gt; menu item to add it to the block number list
below. On the main menu we also have options to &lt;strong&gt;Unblock&lt;/strong&gt;, and &lt;strong&gt;Unblock
All&lt;/strong&gt;. And we have our almost universal &lt;strong&gt;About&lt;/strong&gt; and &lt;strong&gt;Exit&lt;/strong&gt; menu
items.
&lt;/p&gt;
&lt;p&gt;
There are two main pieces to this application. One part is the State and Notification
Broker code to give us an event to catch incoming phone calls.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I actually got myself painted into a corner, I assumed you could just programmatically
ignore of phone call but it isn’t that simple. Fortunately, a good friend of mine, &lt;a href="http://ilovevb.net/Web/blogs/vbmobile/archive/2008/02/15/0wn-ur-phone-taking-back-control-of-your-mobile-phone.aspx"&gt;Lou
Vega&lt;/a&gt;, came up with a very slick workaround for this. And that is the second part
which is the &lt;strong&gt;keybd_event&lt;/strong&gt; method that allows us to send keypresses
to the OS to &lt;strong&gt;Ignore&lt;/strong&gt; the phone call.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;CallBlock Core Code&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 54.53%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; KEYEVENTF_KEYDOWN
= 0x0;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; KEYEVENTF_KEYUP
= 0x2;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; [DllImport(&lt;span style="color: #006080"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;,
EntryPoint = &lt;span style="color: #006080"&gt;&amp;quot;keybd_event&amp;quot;&lt;/span&gt;, SetLastError
= &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; keybd_event(&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt; bVk, &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt; bScan, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; dwFlags, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; dwExtraInfo);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; SystemState
phoneIncomingCall = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SystemState(SystemProperty.PhoneIncomingCall);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; frmMain_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
EventArgs e)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; phoneIncomingCall.Changed
+= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ChangeEventHandler(phoneIncomingCall_Changed);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; phoneIncomingCall_Changed(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
ChangeEventArgs args)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; phoneNumber
= RemoveText(SystemState.PhoneIncomingCallerNumber);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(listBoxBlockedNumbers.Items.Contains(phoneNumber))&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt; keybd_event(115,
0, KEYEVENTF_KEYDOWN, 0);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 20:&lt;/span&gt; keybd_event(115,
0, KEYEVENTF_KEYUP, 0);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 21:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 22:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
It would be easy to add support for blocking SMS text messages as well. We’ve done
all the code for this already in previous applications. Also the application could
really use a persistent data store to remember number to block in case the user closes
the application. It would be nice to allow user formatting of entered phone numbers
for increased readability.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/CallBlock.CAB"&gt;callBlock.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/CallBlock.zip"&gt;callBlock.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=0efa1259-75a9-41f0-8fd4-15e4b73b1a96" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,0efa1259-75a9-41f0-8fd4-15e4b73b1a96.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=347d750c-04c9-400c-a33d-67a6b61d3479</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,347d750c-04c9-400c-a33d-67a6b61d3479.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,347d750c-04c9-400c-a33d-67a6b61d3479.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=347d750c-04c9-400c-a33d-67a6b61d3479</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
So <a href="http://www.pagebrooks.com/">Page Brooks</a> was talking with me earlier
this week and he had a great idea for another Windows Mobile application. He wants
an application that will repeat alerts for missed phones and text messages. I have
to admit this is something I could use myself. So I figured I take a crack at it today,
since it would make for a fun, <strong>simple</strong>, Friday app.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay27Rep_146E5/image_2.png">
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay27Rep_146E5/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Repeatr</strong>
        </p>
        <p>
I decided to change up the naming format and play of the popular Web 2.0 naming conventions
giving us the name: <strong>Repeatr</strong>. I have to admit, it is kind of catchy.
</p>
        <p>
I searched for “Web 2.0 Logo Creator” and pretty much went with the first one I saw.
This gave me a pretty slick logo in less than 5 minutes. I also decided to make the
background a “tooltip” yellow, which I think looks really good.
</p>
        <p>
Other than that everything is rather straight forward. We have checkboxes allowing
the user to choose what events we will monitor. And we have a menu with a couple options,
namely <strong>About</strong> and <strong>Exit</strong>. There is a “Clear Alerts”
menu item, as well, that allows users to acknowledge they have responded to the alert(s).
</p>
        <p>
The application allows user to select the number of minutes between alerts up to 60
minutes.
</p>
        <p>
Of course we are using the <a href="http://msdn.microsoft.com/en-us/library/aa455748.aspx">State
and Notification Broker</a> to make all this happen. Using it means we hardly have
to write any code ourselves!
</p>
        <p>
          <strong>State and Notification Broker setup code</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 64.06%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span> SystemState
phoneMissedCalls = <span style="color: #0000ff">new</span> SystemState(SystemProperty.PhoneMissedCalls);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> SystemState
messagingSmsUnread = <span style="color: #0000ff">new</span> SystemState(SystemProperty.MessagingSmsUnread);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> SystemState
messagingTotalEmailUnread = <span style="color: #0000ff">new</span> SystemState(SystemProperty.MessagingTotalEmailUnread);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> SystemState
messagingVoiceMailTotalUnread = <span style="color: #0000ff">new</span> SystemState(SystemProperty.MessagingVoiceMailTotalUnread);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> frmMain_Load(<span style="color: #0000ff">object</span> sender,
EventArgs e)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> phoneMissedCalls.Changed
+= <span style="color: #0000ff">new</span> ChangeEventHandler(phoneMissedCalls_Changed);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> messagingSmsUnread.Changed
+= <span style="color: #0000ff">new</span> ChangeEventHandler(messagingSmsUnread_Changed);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> messagingTotalEmailUnread.Changed
+= <span style="color: #0000ff">new</span> ChangeEventHandler(messagingTotalEmailUnread_Changed);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> messagingVoiceMailTotalUnread.Changed
+= <span style="color: #0000ff">new</span> ChangeEventHandler(messagingVoiceMailTotalUnread_Changed);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> }</pre>
          </div>
        </div>
        <p>
 
</p>
        <p>
The way we alert a user to having missed a monitored event is by playing a sounds
which is easy to do.
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 85.59%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 196px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span> [DllImport(<span style="color: #006080">"aygshell.dll"</span>)]</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span>
              <span style="color: #0000ff">static</span>
              <span style="color: #0000ff">extern</span>
              <span style="color: #0000ff">uint</span> SndPlaySync(<span style="color: #0000ff">string</span> pszSoundFile, <span style="color: #0000ff">uint</span> dwFlags);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>
              <span style="color: #0000ff">void</span> PlaySound()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #0000ff">string</span> path;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> path
= Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> SndPlaySync(Path.Combine(path, <span style="color: #006080">"alert.wma"</span>),
0);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> }</pre>
          </div>
        </div>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Other than a little plumbing to make everything work together that is basically the
entire app in a nutshell.
</p>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
This is a pretty spiffy application. But software can always be better. An option
to allow the phone to vibrate would be great. Another option to allow the user to
select the alert sound would be nice too.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/Repeatr.CAB">repeatr.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/Repeatr.zip">repeatr.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=347d750c-04c9-400c-a33d-67a6b61d3479" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; Day 27: Repeatr</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,347d750c-04c9-400c-a33d-67a6b61d3479.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/28/30DaysOfNETWindowsMobileApplicationsNdashDay27Repeatr.aspx</link>
      <pubDate>Sat, 28 Jun 2008 07:30:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
So &lt;a href="http://www.pagebrooks.com/"&gt;Page Brooks&lt;/a&gt; was talking with me earlier
this week and he had a great idea for another Windows Mobile application. He wants
an application that will repeat alerts for missed phones and text messages. I have
to admit this is something I could use myself. So I figured I take a crack at it today,
since it would make for a fun, &lt;strong&gt;simple&lt;/strong&gt;, Friday app.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay27Rep_146E5/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay27Rep_146E5/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Repeatr&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I decided to change up the naming format and play of the popular Web 2.0 naming conventions
giving us the name: &lt;strong&gt;Repeatr&lt;/strong&gt;. I have to admit, it is kind of catchy.
&lt;/p&gt;
&lt;p&gt;
I searched for “Web 2.0 Logo Creator” and pretty much went with the first one I saw.
This gave me a pretty slick logo in less than 5 minutes. I also decided to make the
background a “tooltip” yellow, which I think looks really good.
&lt;/p&gt;
&lt;p&gt;
Other than that everything is rather straight forward. We have checkboxes allowing
the user to choose what events we will monitor. And we have a menu with a couple options,
namely &lt;strong&gt;About&lt;/strong&gt; and &lt;strong&gt;Exit&lt;/strong&gt;. There is a “Clear Alerts”
menu item, as well, that allows users to acknowledge they have responded to the alert(s).
&lt;/p&gt;
&lt;p&gt;
The application allows user to select the number of minutes between alerts up to 60
minutes.
&lt;/p&gt;
&lt;p&gt;
Of course we are using the &lt;a href="http://msdn.microsoft.com/en-us/library/aa455748.aspx"&gt;State
and Notification Broker&lt;/a&gt; to make all this happen. Using it means we hardly have
to write any code ourselves!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;State and Notification Broker setup code&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 64.06%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; SystemState
phoneMissedCalls = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SystemState(SystemProperty.PhoneMissedCalls);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; SystemState
messagingSmsUnread = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SystemState(SystemProperty.MessagingSmsUnread);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; SystemState
messagingTotalEmailUnread = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SystemState(SystemProperty.MessagingTotalEmailUnread);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; SystemState
messagingVoiceMailTotalUnread = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SystemState(SystemProperty.MessagingVoiceMailTotalUnread);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; frmMain_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
EventArgs e)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; phoneMissedCalls.Changed
+= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ChangeEventHandler(phoneMissedCalls_Changed);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; messagingSmsUnread.Changed
+= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ChangeEventHandler(messagingSmsUnread_Changed);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; messagingTotalEmailUnread.Changed
+= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ChangeEventHandler(messagingTotalEmailUnread_Changed);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; messagingVoiceMailTotalUnread.Changed
+= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ChangeEventHandler(messagingVoiceMailTotalUnread_Changed);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
The way we alert a user to having missed a monitored event is by playing a sounds
which is easy to do.
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 85.59%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 196px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; [DllImport(&lt;span style="color: #006080"&gt;&amp;quot;aygshell.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff"&gt;uint&lt;/span&gt; SndPlaySync(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; pszSoundFile, &lt;span style="color: #0000ff"&gt;uint&lt;/span&gt; dwFlags);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; PlaySound()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; path;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; path
= Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; SndPlaySync(Path.Combine(path, &lt;span style="color: #006080"&gt;&amp;quot;alert.wma&amp;quot;&lt;/span&gt;),
0);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Other than a little plumbing to make everything work together that is basically the
entire app in a nutshell.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This is a pretty spiffy application. But software can always be better. An option
to allow the phone to vibrate would be great. Another option to allow the user to
select the alert sound would be nice too.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/Repeatr.CAB"&gt;repeatr.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/Repeatr.zip"&gt;repeatr.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=347d750c-04c9-400c-a33d-67a6b61d3479" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,347d750c-04c9-400c-a33d-67a6b61d3479.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=361d8b11-cd9e-44df-93e8-ee7361e675d4</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,361d8b11-cd9e-44df-93e8-ee7361e675d4.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,361d8b11-cd9e-44df-93e8-ee7361e675d4.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=361d8b11-cd9e-44df-93e8-ee7361e675d4</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
          <strong>4 Days left…</strong>
        </p>
        <p>
Today on twitter, <a href="http://twitter.com/glengordon">Glen Gordon</a> was telling <a href="http://twitter.com/CJCraft">me</a> that <a href="http://twitter.com/brendonschwartz">Brendon
Schwartz</a> had an idea for today’s application: 
</p>
        <blockquote>
          <p>
            <strong>
              <a href="http://twitter.com/glengordon">glengordon</a>
            </strong> @<a href="http://twitter.com/cjcraft">cjcraft</a> here's
an idea for a mobile app that @<a href="http://twitter.com/brendonschwartz">brendonschwartz</a> will
like - record $ spent during the day and where it was spent (with GPS) <a href="http://twitter.com/glengordon/statuses/844142603"><abbr>
about 13 hours
</abbr>
ago</a> from <a href="http://code.google.com/p/wittytwitter/">Witty</a><a href="http://twitter.com/CJCraft/statuses/842500577">in
reply to CJCraft</a></p>
        </blockquote>
        <p>
It’s a really good idea. Probably a better idea than we will be able to do it tonight,
but we are all about taking the first small steps to accomplishing great things.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay26Geo_14127/image_2.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay26Geo_14127/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <blockquote>
          <p>
            <strong>GeoCash</strong>
          </p>
          <p>
I love the name, it is a play on <a href="http://en.wikipedia.org/wiki/Geocaching">GeoCaching</a>.
Somehow it adds a lot of “buzz” to the application already.
</p>
          <p>
The application is designed to be easy for the user to use and understand. The user
only needs to enter the amount they spent along with a note, and then simply press <strong>log</strong> and
it will be added to the GeoCash log.
</p>
          <p>
We are using our own <strong>NumericTextBox</strong> to be sure the user doesn’t enter
in any invalid amounts spent. We have another standard TextBox for the note input.
Below this we have the log information. This is done using a <strong>WebBrowser</strong> control,
and setting its <strong>DocumentText</strong> property.
</p>
          <p>
The main reason to use the WebBrowser control is to be able to do a little better
text formatting. This allowed us to easily markup our text in bold and color.
</p>
          <p>
 
</p>
          <p>
            <strong>HTML formatted output:</strong>
          </p>
          <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 65.04%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 180px; background-color: #f4f4f4">
            <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
                <span style="color: #606060"> 1:</span> sb.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Date:&lt;/b&gt;
{0}"</span>, DateTime.Now).Append(<span style="color: #006080">"&lt;br/&gt;"</span>);</pre>
              <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
                <span style="color: #606060"> 2:</span> sb.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Amount:&lt;/b&gt;
&lt;span style="</span><span style="color: #006080">"color:red"</span><span style="color: #006080">"&gt;{0:c}&lt;/span&gt;"</span>, <span style="color: #0000ff">decimal</span>.Parse(textBoxAmountSpent.Text)).Append(<span style="color: #006080">"&lt;br/&gt;"</span>);</pre>
              <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
                <span style="color: #606060"> 3:</span> sb.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Note:&lt;/b&gt;
{0}"</span>, textBoxNote.Text).Append(<span style="color: #006080">"&lt;br/&gt;"</span>);</pre>
              <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
                <span style="color: #606060"> 4:</span> sb.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Latitude:&lt;/b&gt;
{0}"</span>, position.Latitude).Append(<span style="color: #006080">"&lt;br/&gt;"</span>);</pre>
              <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
                <span style="color: #606060"> 5:</span> sb.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Longitude:&lt;/b&gt;
{0}"</span>, position.Longitude).Append(<span style="color: #006080">"&lt;br/&gt;"</span>);</pre>
              <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
                <span style="color: #606060"> 6:</span> sb.Append(<span style="color: #006080">"&lt;br/&gt;"</span>);</pre>
              <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
                <span style="color: #606060"> 7:</span>  </pre>
              <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
                <span style="color: #606060"> 8:</span> documentText
+= sb.ToString();</pre>
              <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
                <span style="color: #606060"> 9:</span> webBrowser.DocumentText
= documentText;</pre>
            </div>
          </div>
        </blockquote>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
 
</p>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
I love this app. It has so many cool possibilities. You could easily save this information
to a text file or sent it as an email. I think this is perfect data to do a mashup
on for example create a heatmap etc for it so you can see the “<strong>dangerous</strong>”
side of town you need to avoid taking your money into from now on. <img alt="Open-mouthed" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/teeth_smile.gif" /></p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GeoCash.CAB">geoCash.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GeoCash.zip">geoCash.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=361d8b11-cd9e-44df-93e8-ee7361e675d4" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; Day 26: GeoCash</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,361d8b11-cd9e-44df-93e8-ee7361e675d4.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/27/30DaysOfNETWindowsMobileApplicationsNdashDay26GeoCash.aspx</link>
      <pubDate>Fri, 27 Jun 2008 06:59:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4 Days left…&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Today on twitter, &lt;a href="http://twitter.com/glengordon"&gt;Glen Gordon&lt;/a&gt; was telling &lt;a href="http://twitter.com/CJCraft"&gt;me&lt;/a&gt; that &lt;a href="http://twitter.com/brendonschwartz"&gt;Brendon
Schwartz&lt;/a&gt; had an idea for today’s application: 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;&lt;a href="http://twitter.com/glengordon"&gt;glengordon&lt;/a&gt;&lt;/strong&gt; @&lt;a href="http://twitter.com/cjcraft"&gt;cjcraft&lt;/a&gt; here's
an idea for a mobile app that @&lt;a href="http://twitter.com/brendonschwartz"&gt;brendonschwartz&lt;/a&gt; will
like - record $ spent during the day and where it was spent (with GPS) &lt;a href="http://twitter.com/glengordon/statuses/844142603"&gt;
&lt;abbr&gt;
about 13 hours
&lt;/abbr&gt;
ago&lt;/a&gt; from &lt;a href="http://code.google.com/p/wittytwitter/"&gt;Witty&lt;/a&gt; &lt;a href="http://twitter.com/CJCraft/statuses/842500577"&gt;in
reply to CJCraft&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
It’s a really good idea. Probably a better idea than we will be able to do it tonight,
but we are all about taking the first small steps to accomplishing great things.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay26Geo_14127/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay26Geo_14127/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;GeoCash&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I love the name, it is a play on &lt;a href="http://en.wikipedia.org/wiki/Geocaching"&gt;GeoCaching&lt;/a&gt;.
Somehow it adds a lot of “buzz” to the application already.
&lt;/p&gt;
&lt;p&gt;
The application is designed to be easy for the user to use and understand. The user
only needs to enter the amount they spent along with a note, and then simply press &lt;strong&gt;log&lt;/strong&gt; and
it will be added to the GeoCash log.
&lt;/p&gt;
&lt;p&gt;
We are using our own &lt;strong&gt;NumericTextBox&lt;/strong&gt; to be sure the user doesn’t enter
in any invalid amounts spent. We have another standard TextBox for the note input.
Below this we have the log information. This is done using a &lt;strong&gt;WebBrowser&lt;/strong&gt; control,
and setting its &lt;strong&gt;DocumentText&lt;/strong&gt; property.
&lt;/p&gt;
&lt;p&gt;
The main reason to use the WebBrowser control is to be able to do a little better
text formatting. This allowed us to easily markup our text in bold and color.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;HTML formatted output:&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 65.04%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 180px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; sb.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Date:&amp;lt;/b&amp;gt;
{0}&amp;quot;&lt;/span&gt;, DateTime.Now).Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; sb.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Amount:&amp;lt;/b&amp;gt;
&amp;lt;span style=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;color:red&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;&amp;gt;{0:c}&amp;lt;/span&amp;gt;&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt;.Parse(textBoxAmountSpent.Text)).Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; sb.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;
{0}&amp;quot;&lt;/span&gt;, textBoxNote.Text).Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; sb.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Latitude:&amp;lt;/b&amp;gt;
{0}&amp;quot;&lt;/span&gt;, position.Latitude).Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; sb.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Longitude:&amp;lt;/b&amp;gt;
{0}&amp;quot;&lt;/span&gt;, position.Longitude).Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; sb.Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; documentText
+= sb.ToString();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; webBrowser.DocumentText
= documentText;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I love this app. It has so many cool possibilities. You could easily save this information
to a text file or sent it as an email. I think this is perfect data to do a mashup
on for example create a heatmap etc for it so you can see the “&lt;strong&gt;dangerous&lt;/strong&gt;”
side of town you need to avoid taking your money into from now on. &lt;img alt="Open-mouthed" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/teeth_smile.gif" /&gt;
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GeoCash.CAB"&gt;geoCash.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GeoCash.zip"&gt;geoCash.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=361d8b11-cd9e-44df-93e8-ee7361e675d4" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,361d8b11-cd9e-44df-93e8-ee7361e675d4.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=2f4580f1-d411-44cc-b76a-12c6a7a7141a</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,2f4580f1-d411-44cc-b76a-12c6a7a7141a.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,2f4580f1-d411-44cc-b76a-12c6a7a7141a.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2f4580f1-d411-44cc-b76a-12c6a7a7141a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
          <strong>5 Days Left…</strong>
        </p>
        <p>
So when you are talking Windows Mobile Applications you are usually talking about
a cell phone device. We have looked at text messages using SMS, but one thing we haven’t
look at so far is programmatically making phone calls. Today we will take a look at
creating our own phone dialer application. It’s easier than you think!
</p>
        <p>
 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay24Mob_14659/image_2.png">
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay24Mob_14659/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>SmartDial</strong>
        </p>
        <p>
I think the UI is pretty nice, not the best, but good overall. It is bright and clean.
I found a web site that allowed me to create buttons in a snap and used it for the
numbers. At the top of the screen, I added a label to display the number to dial.
The menu only has a few options: <strong>Dial</strong>, <strong>Menu</strong>, <strong>Clear</strong>, <strong>About</strong>,
and <strong>Exit</strong>.
</p>
        <p>
Since we only allow users to enter numbers using our custom buttons, we don’t have
to worry about anyone entering invalid characters. 
</p>
        <p>
So how much code did we as Windows Mobile application developers have to write to
actually dial a number? See for yourself.
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 48.63%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 100px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> Dial()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">new</span> Phone().Talk(labelPhoneNumber.Text);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> }</pre>
          </div>
        </div>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
I think this has the potential to be an absolutely great application. One thing I
think would be cool is if the application supported skinning. In a way it does, since
I decided to leave the image resources as external files to the executable. So a user
could edit any of the files themselves. Another great enhancement would be to have
mousedown images for each button to give a nice “animated” touch to the application.
What about quick soft sounds for when each button is pressed?
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/SmartDial.CAB">smartDial.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/SmartDial.zip">smartDial.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=2f4580f1-d411-44cc-b76a-12c6a7a7141a" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; Day 25: SmartDial</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,2f4580f1-d411-44cc-b76a-12c6a7a7141a.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/26/30DaysOfNETWindowsMobileApplicationsNdashDay25SmartDial.aspx</link>
      <pubDate>Thu, 26 Jun 2008 04:12:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5 Days Left…&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
So when you are talking Windows Mobile Applications you are usually talking about
a cell phone device. We have looked at text messages using SMS, but one thing we haven’t
look at so far is programmatically making phone calls. Today we will take a look at
creating our own phone dialer application. It’s easier than you think!
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay24Mob_14659/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay24Mob_14659/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;SmartDial&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I think the UI is pretty nice, not the best, but good overall. It is bright and clean.
I found a web site that allowed me to create buttons in a snap and used it for the
numbers. At the top of the screen, I added a label to display the number to dial.
The menu only has a few options: &lt;strong&gt;Dial&lt;/strong&gt;, &lt;strong&gt;Menu&lt;/strong&gt;, &lt;strong&gt;Clear&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;,
and &lt;strong&gt;Exit&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Since we only allow users to enter numbers using our custom buttons, we don’t have
to worry about anyone entering invalid characters. 
&lt;/p&gt;
&lt;p&gt;
So how much code did we as Windows Mobile application developers have to write to
actually dial a number? See for yourself.
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 48.63%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 100px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Dial()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Phone().Talk(labelPhoneNumber.Text);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I think this has the potential to be an absolutely great application. One thing I
think would be cool is if the application supported skinning. In a way it does, since
I decided to leave the image resources as external files to the executable. So a user
could edit any of the files themselves. Another great enhancement would be to have
mousedown images for each button to give a nice “animated” touch to the application.
What about quick soft sounds for when each button is pressed?
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/SmartDial.CAB"&gt;smartDial.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/SmartDial.zip"&gt;smartDial.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=2f4580f1-d411-44cc-b76a-12c6a7a7141a" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,2f4580f1-d411-44cc-b76a-12c6a7a7141a.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=f169d2c3-2bff-42fb-bc06-9ae52b335e4d</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,f169d2c3-2bff-42fb-bc06-9ae52b335e4d.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,f169d2c3-2bff-42fb-bc06-9ae52b335e4d.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f169d2c3-2bff-42fb-bc06-9ae52b335e4d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today I am in Atlanta, GA with Brian Hitney and Glen Gordon. We are presenting <a href="http://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&amp;EventID=1032378497" target="_blank">Mobility
Roadshow: Programming for Windows Mobile</a>. We had a long drive last night, and
will have another long drive back to Florence, SC tonight. So I choose not bite off
anything too intense today.
</p>
        <p>
Many people today carry mini-flashlights on the end of their key chain. Apparently
there is a need for this type of device because many stores sell them near the cash
registers in the checkout lines. I wonder why these mini-flashlights are so popular
when almost everyone has a mobile phone today. Maybe it is because the phone’s back
light is not bright enough.
</p>
        <p>
Hmm, this got me thinking. Most Windows Mobile devices have large powerful screens,
maybe there is a way we could reuse our device as both a mobile phone and a mini-flashlight.
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_A3E3/image_2.png">
            <img title="image" style="margin: 5px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_A3E3/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>
            <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_A3E3/image_4.png">
              <img title="image" style="margin: 5px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_A3E3/image_thumb_1.png" width="155" align="right" border="0" />
            </a>Mobile
Flashlight</strong>
        </p>
        <p>
The UI is simple but the task is simple. I considered using a watermark image for
the background or add a gradient to the background. With a goal of having as much
of the screen as bright as possible I think the simple solid color background was
the choice to make.
</p>
        <p>
We only have a few menu options: <strong>Burn</strong>, <strong>Menu</strong>, <strong>Settings</strong>, <strong>About</strong>,
and <strong>Exit</strong>. I decided to use the term “Burn” like you see on road sign
saying “Motorcycles must burn lights”. We only have a few screens: <strong>Main</strong>, <strong>Settings</strong>, <strong>About</strong>.
The settings screen you should see to the left, and the main screen should be to the
right of this text.
</p>
        <p>
On the about screen we let the user choose the color they would like the screen to
“burn” at. By default we have chosen white to maximize brightness.
</p>
        <p>
We used N<strong>umericUpDown</strong> controls to maximize usability, this allows
user to choose the soft input panel or the control directly to set the color amounts.
</p>
        <p>
          <strong>Save Color Values</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 55.18%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 76px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">int</span> red
= (<span style="color: #0000ff">int</span>) numericUpDownRed.Value;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span>
              <span style="color: #0000ff">int</span> green
= (<span style="color: #0000ff">int</span>) numericUpDownGreen.Value;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">int</span> blue
= (<span style="color: #0000ff">int</span>) numericUpDownBlue.Value;</pre>
          </div>
        </div>
        <p>
 
</p>
        <p>
          <strong>Get Color Values</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 83.08%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 84px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span> numericUpDownRed.Value
= (<span style="color: #0000ff">int</span>) Global.Color.R;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> numericUpDownGreen.Value
= (<span style="color: #0000ff">int</span>) Global.Color.G;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> numericUpDownBlue.Value
= (<span style="color: #0000ff">int</span>) Global.Color.B;</pre>
          </div>
        </div>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
The biggest need this application has is a way for the user to save their color preference.
Right now if the application is closed the color will go back to the default color
of white. Another great feature would be to make the application to go full screen
and hide both the title bar and the menu. One last addition would be code to maximize
the screen brightness setting in Control Panel.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileFlashLight.CAB" target="_blank">mobileFlashlight.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileFlashLight.zip" target="_blank">mobileFlashlight.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=f169d2c3-2bff-42fb-bc06-9ae52b335e4d" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; Day 24: Mobile Flashlight</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,f169d2c3-2bff-42fb-bc06-9ae52b335e4d.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx</link>
      <pubDate>Tue, 24 Jun 2008 19:46:00 GMT</pubDate>
      <description>&lt;p&gt;
Today I am in Atlanta, GA with Brian Hitney and Glen Gordon. We are presenting &lt;a href="http://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032378497" target="_blank"&gt;Mobility
Roadshow: Programming for Windows Mobile&lt;/a&gt;. We had a long drive last night, and
will have another long drive back to Florence, SC tonight. So I choose not bite off
anything too intense today.
&lt;/p&gt;
&lt;p&gt;
Many people today carry mini-flashlights on the end of their key chain. Apparently
there is a need for this type of device because many stores sell them near the cash
registers in the checkout lines. I wonder why these mini-flashlights are so popular
when almost everyone has a mobile phone today. Maybe it is because the phone’s back
light is not bright enough.
&lt;/p&gt;
&lt;p&gt;
Hmm, this got me thinking. Most Windows Mobile devices have large powerful screens,
maybe there is a way we could reuse our device as both a mobile phone and a mini-flashlight.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_A3E3/image_2.png"&gt;&lt;img title="image" style="margin: 5px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_A3E3/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_A3E3/image_4.png"&gt;&lt;img title="image" style="margin: 5px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_A3E3/image_thumb_1.png" width="155" align="right" border="0" /&gt;&lt;/a&gt;Mobile
Flashlight&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The UI is simple but the task is simple. I considered using a watermark image for
the background or add a gradient to the background. With a goal of having as much
of the screen as bright as possible I think the simple solid color background was
the choice to make.
&lt;/p&gt;
&lt;p&gt;
We only have a few menu options: &lt;strong&gt;Burn&lt;/strong&gt;, &lt;strong&gt;Menu&lt;/strong&gt;, &lt;strong&gt;Settings&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;,
and &lt;strong&gt;Exit&lt;/strong&gt;. I decided to use the term “Burn” like you see on road sign
saying “Motorcycles must burn lights”. We only have a few screens: &lt;strong&gt;Main&lt;/strong&gt;, &lt;strong&gt;Settings&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;.
The settings screen you should see to the left, and the main screen should be to the
right of this text.
&lt;/p&gt;
&lt;p&gt;
On the about screen we let the user choose the color they would like the screen to
“burn” at. By default we have chosen white to maximize brightness.
&lt;/p&gt;
&lt;p&gt;
We used N&lt;strong&gt;umericUpDown&lt;/strong&gt; controls to maximize usability, this allows
user to choose the soft input panel or the control directly to set the color amounts.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Save Color Values&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 55.18%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 76px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; red
= (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) numericUpDownRed.Value;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; green
= (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) numericUpDownGreen.Value;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; blue
= (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) numericUpDownBlue.Value;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Get Color Values&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 83.08%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 84px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; numericUpDownRed.Value
= (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) Global.Color.R;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; numericUpDownGreen.Value
= (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) Global.Color.G;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; numericUpDownBlue.Value
= (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) Global.Color.B;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The biggest need this application has is a way for the user to save their color preference.
Right now if the application is closed the color will go back to the default color
of white. Another great feature would be to make the application to go full screen
and hide both the title bar and the menu. One last addition would be code to maximize
the screen brightness setting in Control Panel.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileFlashLight.CAB" target="_blank"&gt;mobileFlashlight.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileFlashLight.zip" target="_blank"&gt;mobileFlashlight.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=f169d2c3-2bff-42fb-bc06-9ae52b335e4d" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,f169d2c3-2bff-42fb-bc06-9ae52b335e4d.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=e7ae506d-27ad-4446-9ec2-98fd7eb1da67</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,e7ae506d-27ad-4446-9ec2-98fd7eb1da67.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,e7ae506d-27ad-4446-9ec2-98fd7eb1da67.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e7ae506d-27ad-4446-9ec2-98fd7eb1da67</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Information is power. And with the .NET Compact Framework we can have all the information
we want. Windows Mobile has many ways to get details about the device our application
is running on. Hands down my favorite is the State and Notification Broker. In a word
it <strong>ROCKS</strong>! You can use it to find out any number of things and you
can use it to notify us when information we care about change state. 
</p>
        <p>
There are pieces of information that are so important in their own right, they could
be used to create an application just to monitor and read that one detail. The first
one that comes to mind is battery state.
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_F8E7/image_2.png">
            <img title="image" style="margin: 5px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_F8E7/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
          <strong>MobileInfo</strong>
        </p>
        <p>
I thought of a few ways I could make this application flashy, but decided that might
get in the way of the facts. Sometimes a simple notepad like application is the most
beautiful application. <strong>Form and function were meant to be together, but sometimes
forms steals the show, and function is what everyone came to see.</strong></p>
        <p>
So instead we have a WebBrowser control with a simple text listing of the device’s
most important details. I decided to use a WebBrowser control in case I ever did want
to use more advanced text format.
</p>
        <p>
We stick to our guns about keeping control simple and intuitive. We have a great menu
with only a few options: <strong>Refresh</strong>, <strong>About</strong>, and <strong>Exit</strong>.
</p>
        <p>
          <strong>RefreshData Method</strong>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 59.17%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 190px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> RefreshData()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> StringBuilder
sb = <span style="color: #0000ff">new</span> StringBuilder();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span> sb.Append(<span style="color: #006080">"&lt;b&gt;Active
Application:&lt;/b&gt;"</span>).Append(<span style="color: #006080">"&lt;br/&gt;"</span>);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> sb.AppendFormat(<span style="color: #006080">"'{0}'"</span>,
SystemState.ActiveApplication).Append(<span style="color: #006080">"&lt;br/&gt;"</span>).Append(<span style="color: #006080">"&lt;br/&gt;"</span>).Append(<span style="color: #006080">"&lt;br/&gt;"</span>);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> ...</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> }</pre>
          </div>
        </div>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
You can never have too much of a good thing. We have twenty pieces of information
here for users to enjoy. How about a hundred? Or how about a quick and easy search
bar? And the UI needs to be simple but it could be better.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileInfo.CAB" target="_blank">mobileInfo.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileInfo.zip" target="_blank">mobileInfo.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e7ae506d-27ad-4446-9ec2-98fd7eb1da67" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; Day 23: MobileInfo</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,e7ae506d-27ad-4446-9ec2-98fd7eb1da67.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/24/30DaysOfNETWindowsMobileApplicationsNdashDay23MobileInfo.aspx</link>
      <pubDate>Tue, 24 Jun 2008 07:11:00 GMT</pubDate>
      <description>&lt;p&gt;
Information is power. And with the .NET Compact Framework we can have all the information
we want. Windows Mobile has many ways to get details about the device our application
is running on. Hands down my favorite is the State and Notification Broker. In a word
it &lt;strong&gt;ROCKS&lt;/strong&gt;! You can use it to find out any number of things and you
can use it to notify us when information we care about change state. 
&lt;/p&gt;
&lt;p&gt;
There are pieces of information that are so important in their own right, they could
be used to create an application just to monitor and read that one detail. The first
one that comes to mind is battery state.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_F8E7/image_2.png"&gt;&lt;img title="image" style="margin: 5px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay23Mob_F8E7/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;MobileInfo&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I thought of a few ways I could make this application flashy, but decided that might
get in the way of the facts. Sometimes a simple notepad like application is the most
beautiful application. &lt;strong&gt;Form and function were meant to be together, but sometimes
forms steals the show, and function is what everyone came to see.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
So instead we have a WebBrowser control with a simple text listing of the device’s
most important details. I decided to use a WebBrowser control in case I ever did want
to use more advanced text format.
&lt;/p&gt;
&lt;p&gt;
We stick to our guns about keeping control simple and intuitive. We have a great menu
with only a few options: &lt;strong&gt;Refresh&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;, and &lt;strong&gt;Exit&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;RefreshData Method&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 59.17%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 190px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RefreshData()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; StringBuilder
sb = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; sb.Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;b&amp;gt;Active
Application:&amp;lt;/b&amp;gt;&amp;quot;&lt;/span&gt;).Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; sb.AppendFormat(&lt;span style="color: #006080"&gt;&amp;quot;'{0}'&amp;quot;&lt;/span&gt;,
SystemState.ActiveApplication).Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;).Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;).Append(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; ...&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
You can never have too much of a good thing. We have twenty pieces of information
here for users to enjoy. How about a hundred? Or how about a quick and easy search
bar? And the UI needs to be simple but it could be better.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileInfo.CAB" target="_blank"&gt;mobileInfo.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileInfo.zip" target="_blank"&gt;mobileInfo.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e7ae506d-27ad-4446-9ec2-98fd7eb1da67" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,e7ae506d-27ad-4446-9ec2-98fd7eb1da67.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=a2c3a940-9375-4d80-af30-558ec5bfc1fe</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,a2c3a940-9375-4d80-af30-558ec5bfc1fe.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,a2c3a940-9375-4d80-af30-558ec5bfc1fe.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a2c3a940-9375-4d80-af30-558ec5bfc1fe</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
        </p>
        <p>
I have put together a calendar of applications for the 30 Days of .NET [Windows Mobile
Applications]. Here you can get a quick feel for all the applications we’ve created
so far, and will write in the coming days. 
</p>
        <p align="left">
          <strong>
          </strong>
        </p>
        <p align="left">
          <strong>30 Days of .NET Windows Mobile Applications</strong>
        </p>
        <table style="background-color: black" cellspacing="0" cellpadding="2" width="546" border="0">
          <tbody>
            <tr>
              <td valign="top" width="68">
 </td>
              <td valign="top" width="68">
                <a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[111].png">
                  <img title="image_thumb[37]" style="margin: 5px" height="20" alt="image_thumb[37]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B37%5D_7fafc896-f249-4957-a3d1-f038acb9ead5.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[114].png">
                  <img title="image_thumb[38]" style="margin: 5px" height="20" alt="image_thumb[38]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B38%5D_a0444c67-2714-4a10-a90e-32f5d1ffbf7b.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[117].png">
                  <img title="image_thumb[39]" style="margin: 5px" height="20" alt="image_thumb[39]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B39%5D_5084daa1-e7fe-4168-849f-47785601d481.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[120].png">
                  <img title="image_thumb[40]" style="margin: 5px" height="19" alt="image_thumb[40]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B40%5D_f99df5b8-9bbb-4721-8496-a3840ba9abcd.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[123].png">
                  <img title="image_thumb[41]" style="margin: 5px" height="20" alt="image_thumb[41]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B41%5D_152efb34-33a9-457f-8a4a-80553063febe.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="103">
                <a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[126].png">
                  <img title="image_thumb[42]" style="margin: 5px" height="20" alt="image_thumb[42]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B42%5D_a774139b-7514-4f46-b4b1-ae80bfda2f71.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="33">
                <a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[129].png">
                  <img title="image_thumb[43]" style="margin: 5px" height="20" alt="image_thumb[43]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B43%5D_a17fdc54-ca54-4200-8207-0f1763c55f85.png" width="73" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="68">
                <a title="30 Days of .NET [Windows Mobile Applications] - Week One" href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsWeekOne.aspx">
                  <img title="image[141]" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="72" alt="image[141]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B141%5D_ec89826e-50ee-4fb8-9b6a-7336d87d9694.png" width="18" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Minutes to Midnight" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f02%2f30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx" target="_blank">
                  <img title="image[134]" style="margin: 5px" height="86" alt="image[134]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B134%5D_7eb67c08-074b-41d8-97cd-25e05c7ef241.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Bluetooth Manager" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f03%2f30DaysOfNETWindowsMobileApplicationsDay02BluetoothManager.aspx" target="_blank">
                  <img title="image[135]" style="margin: 5px" height="86" alt="image[135]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B135%5D_d79ba247-dc86-4ab4-922d-f06ba7d43576.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="GPS Compass" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f04%2f30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx" target="_blank">
                  <img title="image[136]" style="margin: 5px" height="86" alt="image[136]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B136%5D_68281658-d0d3-4f74-96f2-434b34b9b00d.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mileage Tracker" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f05%2f30DaysOfNETWindowsMobileApplicationsDay04MileageTracker.aspx" target="_blank">
                  <img title="image[137]" style="margin: 5px" height="86" alt="image[137]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B137%5D_f0bbb2d3-141a-40db-9133-ba89e16f7a75.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mobile Capture" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f06%2f30DaysOfNETWindowsMobileApplicationsDay05MobileCapture.aspx" target="_blank">
                  <img title="image[138]" style="margin: 5px" height="86" alt="image[138]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B138%5D_7fcfb873-5b30-4a8f-8a17-124b5bc16124.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="103">
                <a title="Pocket PasswordGen" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f07%2f30DaysOfNETWindowsMobileApplicationsDay06PocketPasswordGen.aspx" target="_blank">
                  <img title="image[139]" style="margin: 5px" height="86" alt="image[139]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B139%5D_bd0c2787-45df-4c0e-a7ac-32b20e15904d.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="33">
                <a title="Mobile FX" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f08%2f30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx" target="_blank">
                  <img title="image[140]" style="margin: 5px" height="86" alt="image[140]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B140%5D_4f558319-245c-46c6-93e9-b0aee8a962c8.png" width="73" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="68">
                <a title="30 Days of .NET [Windows Mobile Applications] - Week Two" href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsWeekTwo.aspx" target="_blank">
                  <img title="image[150]" style="margin: 5px" height="72" alt="image[150]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B150%5D_943c6786-2c28-4f0d-aadf-45dcd4a2b457.png" width="18" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Rotate Me" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f09%2f30DaysOfNETWindowsMobileApplicationsDay08RotateMe.aspx" target="_blank">
                  <img title="image[142]" style="margin: 5px" height="87" alt="image[142]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B142%5D_7a5f4038-a2f7-4b03-9c4b-0c43260bb3d0.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mobile Tipper" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f10%2f30DaysOfNETWindowsMobileApplicationsDay09MobileTipper.aspx" target="_blank">
                  <img title="image[143]" style="margin: 5px" height="87" alt="image[143]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B143%5D_f6d1bbd4-72cf-41d7-b6df-296ca3014b45.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="What is My IP?" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f11%2f30DaysOfNETWindowsMobileApplicationsDay10WhatIsMyIP.aspx" target="_blank">
                  <img title="image[144]" style="margin: 5px" height="87" alt="image[144]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B144%5D_ed3aab1d-6e5c-4598-8895-7b80284e4233.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mobile Signature" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f12%2f30DaysOfNETWindowsMobileApplicationsDay11MobileSignature.aspx" target="_blank">
                  <img title="image[145]" style="margin: 5px" height="87" alt="image[145]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B145%5D_2566fbc2-592d-43f7-9a0f-c9f3be7e4590.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mobile Quiz" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f13%2f30DaysOfNETWindowsMobileApplicationsDay12MobileQuiz.aspx" target="_blank">
                  <img title="image[146]" style="margin: 5px" height="87" alt="image[146]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B146%5D_ffe6c59c-5793-4f66-bcac-8cae291564fa.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="103">
                <a title="Pocket Death Calculator" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f14%2f30DaysOfNETWindowsMobileApplicationsDay13FridayThe13thNdashPocketDeathCalculator.aspx" target="_blank">
                  <img title="image[147]" style="margin: 5px" height="87" alt="image[147]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B147%5D_19ac05dd-b791-451b-8121-aec8fd7baf97.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="33">
                <a title="Mobile SMS Contact" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f15%2f30DaysOfNETWindowsMobileApplicationsDay14MobileSMSContact.aspx" target="_blank">
                  <img title="image[149]" style="margin: 5px" height="87" alt="image[149]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B149%5D_9afc2dff-65ee-4dfc-8017-326c7c2e2dfa.png" width="73" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="68">
                <a title="30 Days of .NET [Windows Mobile Applications] - Week Three" href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsWeekThree.aspx" target="_blank">
                  <img title="image[151]" style="margin: 5px" height="72" alt="image[151]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B151%5D_7b12d149-5432-4c57-a70b-17d0474fff3d.png" width="18" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mobile SMS Remote" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f16%2f30DaysOfNETWindowsMobileApplicationsDay15MobileSMSRemote.aspx" target="_blank">
                  <img title="image[152]" style="margin: 5px" height="87" alt="image[152]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B152%5D_b68c351f-4377-4d15-b492-e82f8afff729.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="SMS Logger" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f17%2f30DaysOfNETWindowsMobileApplicationsDay16SMSLogger.aspx" target="_blank">
                  <img title="image[153]" style="margin: 5px" height="87" alt="image[153]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B153%5D_2b7567eb-bf3d-4c20-8d24-7a4368346297.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Lunch-O-Matic" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f18%2f30DaysOfNETWindowsMobileApplicationsDay17LunchOMatic.aspx" target="_blank">
                  <img title="image[154]" style="margin: 5px" height="86" alt="image[154]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B154%5D_9f866a7c-9caf-4272-8a0f-c10fd6b09129.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mobile Weather" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f19%2f30DaysOfNETWindowsMobileApplicationsDay18MobileWeather.aspx" target="_blank">
                  <img title="image[155]" style="margin: 5px" height="87" alt="image[155]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B155%5D_0ae5aca0-4480-44bd-9668-71ccc7cb5fa3.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mobile Speedometer" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f20%2f30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx" target="_blank">
                  <img title="image[156]" style="margin: 5px" height="86" alt="image[156]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B156%5D_4d054231-9dbb-4d4c-a083-2de848ca8038.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="103">
                <a title="Mobile Altimeter" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f21%2f30DaysOfNETWindowsMobileApplicationsDay20MobileAltimeter.aspx" target="_blank">
                  <img title="image[157]" style="margin: 5px" height="87" alt="image[157]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B157%5D_ba6d3f85-aefc-4123-8c6e-36dfb1e78ab0.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="33">
                <a title="Mobile Sketcher" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f22%2f30DaysOfNETWindowsMobileApplicationsDay21MobileSketcher.aspx" target="_blank">
                  <img title="image[158]" style="margin: 5px" height="87" alt="image[158]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B158%5D_25944ad2-b6e3-49ee-8343-b346be230d12.png" width="73" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="68">
                <a title="30 Days of .NET [Windows Mobile Applications] - Week Four" href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsWeekFour.aspx" target="_blank">
                  <img title="image[166]" style="margin: 5px" height="71" alt="image[166]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B166%5D_2e08df80-8dd4-4d24-b805-2a13552df0c4.png" width="18" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="GPS Clock" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f22%2f30DaysOfNETWindowsMobileApplicationsDay22GPSClock.aspx" target="_blank">
                  <img title="image[159]" style="margin: 5px" height="87" alt="image[159]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B159%5D_c34ccc15-6cba-42be-9c13-77b7a3674572.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mobile Info" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay23MobileInfo.aspx" target="_blank">
                  <img title="image[160]" style="margin: 5px" height="87" alt="image[160]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B160%5D_1ffa7467-314f-4894-891b-d7c564ba78f4.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Mobile Flashlight" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx" target="_blank">
                  <img title="image[161]" style="margin: 5px" height="87" alt="image[161]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B161%5D_f498cef3-ed1f-4df8-ae5a-869ce98733b9.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="SmartDial" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f26%2f30DaysOfNETWindowsMobileApplicationsNdashDay25SmartDial.aspx" target="_blank">
                  <img title="image[162]" style="margin: 5px" height="87" alt="image[162]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B162%5D_ef748d98-2187-4a41-9030-676a3417cc1e.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="GeoCash" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f27%2f30DaysOfNETWindowsMobileApplicationsNdashDay26GeoCash.aspx" target="_blank">
                  <img title="image[163]" style="margin: 5px" height="87" alt="image[163]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B163%5D_85719c30-d4c1-4e36-9148-08fb7577b2e7.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="103">
                <a title="Repeatr" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f28%2f30DaysOfNETWindowsMobileApplicationsNdashDay27Repeatr.aspx" target="_blank">
                  <img title="image[164]" style="margin: 5px" height="87" alt="image[164]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B164%5D_555e1da3-7d0f-4867-942a-852bdedbe360.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="33">
                <a title="CallBlocker" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f28%2f30DaysOfNETWindowsMobileApplicationsNdashDay28CallBlocker.aspx" target="_blank">
                  <img title="image[165]" style="margin: 5px" height="87" alt="image[165]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B165%5D_beaeb0c8-8b10-423b-8870-0f817778497a.png" width="73" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="68">
                <a title="30 Days of .NET [Windows Mobile Applications] – The Road Ahead" href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashTheRoadAhead.aspx" target="_blank">
                  <img title="image[167]" style="margin: 5px" height="72" alt="image[167]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B167%5D_0896a1b9-9e8c-42ff-837d-821bba198b83.png" width="18" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Community Megaphone Reader" href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashDay29CommunityMegaphoneReader.aspx" target="_blank">
                  <img title="image[168]" style="margin: 5px" height="87" alt="image[168]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B168%5D_d53159dd-1219-4ed7-8d89-aeb065915b17.png" width="73" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
                <a title="Tripper" href="http://www.cjcraft.com/blog/2008/07/01/30DaysOfNETWindowsMobileApplicationsNdashDay30Trippr.aspx" target="_blank">
                  <img title="image[169]" style="margin: 5px" height="87" alt="image[169]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B169%5D_eff24d3f-4948-41f5-b8d9-eddeac7ef83d.png" width="74" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="68">
 </td>
              <td valign="top" width="68">
 </td>
              <td valign="top" width="68">
 </td>
              <td valign="top" width="103">
 </td>
              <td valign="top" width="33">
 </td>
            </tr>
          </tbody>
        </table>
        <p>
        </p>
        <p>
 
</p>
        <table style="background-color: black" cellspacing="0" cellpadding="2" width="665" border="0">
          <tbody>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">
                </font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 1</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f02%2f30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx">
                  <font color="#ffffff">Minutes
to Midnight Countdown</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Countdown timer until midnight.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 2</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f03%2f30DaysOfNETWindowsMobileApplicationsDay02BluetoothManager.aspx">
                  <font color="#ffffff">Bluetooth
Manager</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Utility to programmatically control Bluetooth status.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 3</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f04%2f30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx">
                  <font color="#ffffff">GPS
Compass</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   GPS tools to read device’s heading from device
GPS.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 4</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f05%2f30DaysOfNETWindowsMobileApplicationsDay04MileageTracker.aspx">
                  <font color="#ffffff">Mileage
Tracker</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Application that will track vehicles mileage statistics.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 5</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f06%2f30DaysOfNETWindowsMobileApplicationsDay05MobileCapture.aspx">
                  <font color="#ffffff">Mobile
Capture</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Screenshot utility that will programmatically take
screenshots on device.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 6</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f07%2f30DaysOfNETWindowsMobileApplicationsDay06PocketPasswordGen.aspx">
                  <font color="#ffffff">Pocket
PasswordGen</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Program generates secure random passwords.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 7</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f08%2f30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx">
                  <font color="#ffffff">Mobile
FX</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Fun application that allows user to play various
“situation” sounds.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 8</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f09%2f30DaysOfNETWindowsMobileApplicationsDay08RotateMe.aspx">
                  <font color="#ffffff">Rotate
Me</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Utility to programmatically control the device’s
orientation.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 9</font>
              </td>
              <td valign="top" width="604">
                <p>
                  <a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f10%2f30DaysOfNETWindowsMobileApplicationsDay09MobileTipper.aspx">
                    <font color="#ffffff">Mobile
Tipper</font>
                  </a>
                </p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Allows users to calculate tips quickly and easily.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 10</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f11%2f30DaysOfNETWindowsMobileApplicationsDay10WhatIsMyIP.aspx">
                  <font color="#ffffff">What
is My IP?</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Find out the IP addresses a device has in a snap.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 11</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f12%2f30DaysOfNETWindowsMobileApplicationsDay11MobileSignature.aspx">
                  <font color="#ffffff">Mobile
Signature</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Program that will capture signature from people
in the field.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 12</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f13%2f30DaysOfNETWindowsMobileApplicationsDay12MobileQuiz.aspx">
                  <font color="#ffffff">Mobile
Quiz</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Application that is designed to display created
quizzes and polls to users.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 13</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f14%2f30DaysOfNETWindowsMobileApplicationsDay13FridayThe13thNdashPocketDeathCalculator.aspx">
                  <font color="#ffffff">Pocket
Death Calculator</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Fun program that will calculate how long until
a user has left to live.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 14</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f15%2f30DaysOfNETWindowsMobileApplicationsDay14MobileSMSContact.aspx">
                  <font color="#ffffff">Mobile
SMS Contact</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Utility to allow sending of SMS text messages to
groups.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 15</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f16%2f30DaysOfNETWindowsMobileApplicationsDay15MobileSMSRemote.aspx">
                  <font color="#ffffff">Mobile
SMS Remote</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   SMS framework and application for sending SMS commands
to devices.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 16</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f17%2f30DaysOfNETWindowsMobileApplicationsDay16SMSLogger.aspx">
                  <font color="#ffffff">SMS
Logger</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Record and log all SMS text messages received by
device.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 17</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f18%2f30DaysOfNETWindowsMobileApplicationsDay17LunchOMatic.aspx">
                  <font color="#ffffff">Lunch-O-Matic</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">  Take the chore out of deciding where to eat lunch today.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 18</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f19%2f30DaysOfNETWindowsMobileApplicationsDay18MobileWeather.aspx">
                  <font color="#ffffff">Mobile
Weather</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   What will the weather be like today?</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 19</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f20%2f30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx">
                  <font color="#ffffff">Mobile
Speedometer</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   GPS utility that will obtain current speed from
the device’s GPS.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 20</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f21%2f30DaysOfNETWindowsMobileApplicationsDay20MobileAltimeter.aspx">
                  <font color="#ffffff">Mobile
Altimeter</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   GPS utility that will read the current altitude
from GPS. </font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 21</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f22%2f30DaysOfNETWindowsMobileApplicationsDay21MobileSketcher.aspx">
                  <font color="#ffffff">Mobile
Sketcher</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Simple but powerful drawing application for Windows
Mobile.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 22</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f22%2f30DaysOfNETWindowsMobileApplicationsDay22GPSClock.aspx">
                  <font color="#ffffff">GPS
Clock</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">  GPS application that can update the device’s time from
GPS information.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 23</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay23MobileInfo.aspx">
                  <font color="#ffffff">MobileInfo</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">  Program that will read and display device related information</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 24</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx">
                  <font color="#ffffff">Mobile
Flashlight</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">  In the dark? Mobile Flashlight is here to help.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 25</font>
              </td>
              <td valign="top" width="604">
                <p>
                  <a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx">
                  </a>
                  <a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f26%2f30DaysOfNETWindowsMobileApplicationsNdashDay25SmartDial.aspx">
                    <font color="#ffffff">SmartDial</font>
                  </a>
                </p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">  Want to create your phone dialing interface? Start with
SmartDial.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 26</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f27%2f30DaysOfNETWindowsMobileApplicationsNdashDay26GeoCash.aspx">
                  <font color="#ffffff">GeoCash</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">  This application will log and track where you spend all
your money.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 27</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f28%2f30DaysOfNETWindowsMobileApplicationsNdashDay27Repeatr.aspx">
                  <font color="#ffffff">Repeatr</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Miss a phone call, text message, or email. This
application will remind you.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 28</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f28%2f30DaysOfNETWindowsMobileApplicationsNdashDay28CallBlocker.aspx">
                  <font color="#ffffff">CallBlocker</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Tired of that annoying automated marketing call?
Let CallBlocker block it.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 29</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashDay29CommunityMegaphoneReader.aspx">
                  <font color="#ffffff">Community
Megaphone Reader</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Wondering where the closest developer event is
to you? CMR can tell you.</font>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">Day 30</font>
              </td>
              <td valign="top" width="604">
                <a href="http://www.cjcraft.com/blog/2008/07/01/30DaysOfNETWindowsMobileApplicationsNdashDay30Trippr.aspx">
                  <font color="#ffffff">Trippr</font>
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="59">
                <font color="#ffffff">
                </font>
              </td>
              <td valign="top" width="604">
                <font color="#ffffff">   Let Tripper find geotagged photos from your location
on Flickr.</font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=a2c3a940-9375-4d80-af30-558ec5bfc1fe" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] &amp;ndash; Calendar of Applications</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,a2c3a940-9375-4d80-af30-558ec5bfc1fe.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/23/30DaysOfNETWindowsMobileApplicationsNdashCalendarOfApplications.aspx</link>
      <pubDate>Mon, 23 Jun 2008 05:25:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I have put together a calendar of applications for the 30 Days of .NET [Windows Mobile
Applications]. Here you can get a quick feel for all the applications we’ve created
so far, and will write in the coming days. 
&lt;/p&gt;
&lt;p align="left"&gt;
&lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p align="left"&gt;
&lt;strong&gt;30 Days of .NET Windows Mobile Applications&lt;/strong&gt;
&lt;/p&gt;
&lt;table style="background-color: black" cellspacing="0" cellpadding="2" width="546" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="68"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[111].png"&gt;&lt;img title="image_thumb[37]" style="margin: 5px" height="20" alt="image_thumb[37]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B37%5D_7fafc896-f249-4957-a3d1-f038acb9ead5.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[114].png"&gt;&lt;img title="image_thumb[38]" style="margin: 5px" height="20" alt="image_thumb[38]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B38%5D_a0444c67-2714-4a10-a90e-32f5d1ffbf7b.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[117].png"&gt;&lt;img title="image_thumb[39]" style="margin: 5px" height="20" alt="image_thumb[39]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B39%5D_5084daa1-e7fe-4168-849f-47785601d481.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[120].png"&gt;&lt;img title="image_thumb[40]" style="margin: 5px" height="19" alt="image_thumb[40]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B40%5D_f99df5b8-9bbb-4721-8496-a3840ba9abcd.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[123].png"&gt;&lt;img title="image_thumb[41]" style="margin: 5px" height="20" alt="image_thumb[41]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B41%5D_152efb34-33a9-457f-8a4a-80553063febe.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="103"&gt;
&lt;a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[126].png"&gt;&lt;img title="image_thumb[42]" style="margin: 5px" height="20" alt="image_thumb[42]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B42%5D_a774139b-7514-4f46-b4b1-ae80bfda2f71.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="33"&gt;
&lt;a href="file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter-429641856/supfilesA66B4F3/image[129].png"&gt;&lt;img title="image_thumb[43]" style="margin: 5px" height="20" alt="image_thumb[43]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image_thumb%5B43%5D_a17fdc54-ca54-4200-8207-0f1763c55f85.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="30 Days of .NET [Windows Mobile Applications] - Week One" href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsWeekOne.aspx"&gt;&lt;img title="image[141]" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="72" alt="image[141]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B141%5D_ec89826e-50ee-4fb8-9b6a-7336d87d9694.png" width="18" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Minutes to Midnight" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f02%2f30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx" target="_blank"&gt;&lt;img title="image[134]" style="margin: 5px" height="86" alt="image[134]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B134%5D_7eb67c08-074b-41d8-97cd-25e05c7ef241.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Bluetooth Manager" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f03%2f30DaysOfNETWindowsMobileApplicationsDay02BluetoothManager.aspx" target="_blank"&gt;&lt;img title="image[135]" style="margin: 5px" height="86" alt="image[135]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B135%5D_d79ba247-dc86-4ab4-922d-f06ba7d43576.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="GPS Compass" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f04%2f30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx" target="_blank"&gt;&lt;img title="image[136]" style="margin: 5px" height="86" alt="image[136]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B136%5D_68281658-d0d3-4f74-96f2-434b34b9b00d.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mileage Tracker" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f05%2f30DaysOfNETWindowsMobileApplicationsDay04MileageTracker.aspx" target="_blank"&gt;&lt;img title="image[137]" style="margin: 5px" height="86" alt="image[137]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B137%5D_f0bbb2d3-141a-40db-9133-ba89e16f7a75.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mobile Capture" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f06%2f30DaysOfNETWindowsMobileApplicationsDay05MobileCapture.aspx" target="_blank"&gt;&lt;img title="image[138]" style="margin: 5px" height="86" alt="image[138]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B138%5D_7fcfb873-5b30-4a8f-8a17-124b5bc16124.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="103"&gt;
&lt;a title="Pocket PasswordGen" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f07%2f30DaysOfNETWindowsMobileApplicationsDay06PocketPasswordGen.aspx" target="_blank"&gt;&lt;img title="image[139]" style="margin: 5px" height="86" alt="image[139]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B139%5D_bd0c2787-45df-4c0e-a7ac-32b20e15904d.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="33"&gt;
&lt;a title="Mobile FX" href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f08%2f30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx" target="_blank"&gt;&lt;img title="image[140]" style="margin: 5px" height="86" alt="image[140]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B140%5D_4f558319-245c-46c6-93e9-b0aee8a962c8.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="30 Days of .NET [Windows Mobile Applications] - Week Two" href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsWeekTwo.aspx" target="_blank"&gt;&lt;img title="image[150]" style="margin: 5px" height="72" alt="image[150]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B150%5D_943c6786-2c28-4f0d-aadf-45dcd4a2b457.png" width="18" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Rotate Me" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f09%2f30DaysOfNETWindowsMobileApplicationsDay08RotateMe.aspx" target="_blank"&gt;&lt;img title="image[142]" style="margin: 5px" height="87" alt="image[142]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B142%5D_7a5f4038-a2f7-4b03-9c4b-0c43260bb3d0.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mobile Tipper" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f10%2f30DaysOfNETWindowsMobileApplicationsDay09MobileTipper.aspx" target="_blank"&gt;&lt;img title="image[143]" style="margin: 5px" height="87" alt="image[143]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B143%5D_f6d1bbd4-72cf-41d7-b6df-296ca3014b45.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="What is My IP?" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f11%2f30DaysOfNETWindowsMobileApplicationsDay10WhatIsMyIP.aspx" target="_blank"&gt;&lt;img title="image[144]" style="margin: 5px" height="87" alt="image[144]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B144%5D_ed3aab1d-6e5c-4598-8895-7b80284e4233.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mobile Signature" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f12%2f30DaysOfNETWindowsMobileApplicationsDay11MobileSignature.aspx" target="_blank"&gt;&lt;img title="image[145]" style="margin: 5px" height="87" alt="image[145]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B145%5D_2566fbc2-592d-43f7-9a0f-c9f3be7e4590.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mobile Quiz" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f13%2f30DaysOfNETWindowsMobileApplicationsDay12MobileQuiz.aspx" target="_blank"&gt;&lt;img title="image[146]" style="margin: 5px" height="87" alt="image[146]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B146%5D_ffe6c59c-5793-4f66-bcac-8cae291564fa.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="103"&gt;
&lt;a title="Pocket Death Calculator" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f14%2f30DaysOfNETWindowsMobileApplicationsDay13FridayThe13thNdashPocketDeathCalculator.aspx" target="_blank"&gt;&lt;img title="image[147]" style="margin: 5px" height="87" alt="image[147]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B147%5D_19ac05dd-b791-451b-8121-aec8fd7baf97.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="33"&gt;
&lt;a title="Mobile SMS Contact" href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f15%2f30DaysOfNETWindowsMobileApplicationsDay14MobileSMSContact.aspx" target="_blank"&gt;&lt;img title="image[149]" style="margin: 5px" height="87" alt="image[149]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B149%5D_9afc2dff-65ee-4dfc-8017-326c7c2e2dfa.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="30 Days of .NET [Windows Mobile Applications] - Week Three" href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsWeekThree.aspx" target="_blank"&gt;&lt;img title="image[151]" style="margin: 5px" height="72" alt="image[151]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B151%5D_7b12d149-5432-4c57-a70b-17d0474fff3d.png" width="18" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mobile SMS Remote" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f16%2f30DaysOfNETWindowsMobileApplicationsDay15MobileSMSRemote.aspx" target="_blank"&gt;&lt;img title="image[152]" style="margin: 5px" height="87" alt="image[152]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B152%5D_b68c351f-4377-4d15-b492-e82f8afff729.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="SMS Logger" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f17%2f30DaysOfNETWindowsMobileApplicationsDay16SMSLogger.aspx" target="_blank"&gt;&lt;img title="image[153]" style="margin: 5px" height="87" alt="image[153]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B153%5D_2b7567eb-bf3d-4c20-8d24-7a4368346297.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Lunch-O-Matic" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f18%2f30DaysOfNETWindowsMobileApplicationsDay17LunchOMatic.aspx" target="_blank"&gt;&lt;img title="image[154]" style="margin: 5px" height="86" alt="image[154]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B154%5D_9f866a7c-9caf-4272-8a0f-c10fd6b09129.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mobile Weather" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f19%2f30DaysOfNETWindowsMobileApplicationsDay18MobileWeather.aspx" target="_blank"&gt;&lt;img title="image[155]" style="margin: 5px" height="87" alt="image[155]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B155%5D_0ae5aca0-4480-44bd-9668-71ccc7cb5fa3.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mobile Speedometer" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f20%2f30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx" target="_blank"&gt;&lt;img title="image[156]" style="margin: 5px" height="86" alt="image[156]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B156%5D_4d054231-9dbb-4d4c-a083-2de848ca8038.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="103"&gt;
&lt;a title="Mobile Altimeter" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f21%2f30DaysOfNETWindowsMobileApplicationsDay20MobileAltimeter.aspx" target="_blank"&gt;&lt;img title="image[157]" style="margin: 5px" height="87" alt="image[157]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B157%5D_ba6d3f85-aefc-4123-8c6e-36dfb1e78ab0.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="33"&gt;
&lt;a title="Mobile Sketcher" href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f22%2f30DaysOfNETWindowsMobileApplicationsDay21MobileSketcher.aspx" target="_blank"&gt;&lt;img title="image[158]" style="margin: 5px" height="87" alt="image[158]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B158%5D_25944ad2-b6e3-49ee-8343-b346be230d12.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="30 Days of .NET [Windows Mobile Applications] - Week Four" href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsWeekFour.aspx" target="_blank"&gt;&lt;img title="image[166]" style="margin: 5px" height="71" alt="image[166]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B166%5D_2e08df80-8dd4-4d24-b805-2a13552df0c4.png" width="18" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="GPS Clock" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f22%2f30DaysOfNETWindowsMobileApplicationsDay22GPSClock.aspx" target="_blank"&gt;&lt;img title="image[159]" style="margin: 5px" height="87" alt="image[159]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B159%5D_c34ccc15-6cba-42be-9c13-77b7a3674572.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mobile Info" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay23MobileInfo.aspx" target="_blank"&gt;&lt;img title="image[160]" style="margin: 5px" height="87" alt="image[160]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B160%5D_1ffa7467-314f-4894-891b-d7c564ba78f4.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Mobile Flashlight" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx" target="_blank"&gt;&lt;img title="image[161]" style="margin: 5px" height="87" alt="image[161]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B161%5D_f498cef3-ed1f-4df8-ae5a-869ce98733b9.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="SmartDial" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f26%2f30DaysOfNETWindowsMobileApplicationsNdashDay25SmartDial.aspx" target="_blank"&gt;&lt;img title="image[162]" style="margin: 5px" height="87" alt="image[162]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B162%5D_ef748d98-2187-4a41-9030-676a3417cc1e.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="GeoCash" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f27%2f30DaysOfNETWindowsMobileApplicationsNdashDay26GeoCash.aspx" target="_blank"&gt;&lt;img title="image[163]" style="margin: 5px" height="87" alt="image[163]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B163%5D_85719c30-d4c1-4e36-9148-08fb7577b2e7.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="103"&gt;
&lt;a title="Repeatr" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f28%2f30DaysOfNETWindowsMobileApplicationsNdashDay27Repeatr.aspx" target="_blank"&gt;&lt;img title="image[164]" style="margin: 5px" height="87" alt="image[164]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B164%5D_555e1da3-7d0f-4867-942a-852bdedbe360.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="33"&gt;
&lt;a title="CallBlocker" href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f28%2f30DaysOfNETWindowsMobileApplicationsNdashDay28CallBlocker.aspx" target="_blank"&gt;&lt;img title="image[165]" style="margin: 5px" height="87" alt="image[165]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B165%5D_beaeb0c8-8b10-423b-8870-0f817778497a.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="30 Days of .NET [Windows Mobile Applications] – The Road Ahead" href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashTheRoadAhead.aspx" target="_blank"&gt;&lt;img title="image[167]" style="margin: 5px" height="72" alt="image[167]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B167%5D_0896a1b9-9e8c-42ff-837d-821bba198b83.png" width="18" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Community Megaphone Reader" href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashDay29CommunityMegaphoneReader.aspx" target="_blank"&gt;&lt;img title="image[168]" style="margin: 5px" height="87" alt="image[168]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B168%5D_d53159dd-1219-4ed7-8d89-aeb065915b17.png" width="73" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&lt;a title="Tripper" href="http://www.cjcraft.com/blog/2008/07/01/30DaysOfNETWindowsMobileApplicationsNdashDay30Trippr.aspx" target="_blank"&gt;&lt;img title="image[169]" style="margin: 5px" height="87" alt="image[169]" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsCalendar_144F9/image%5B169%5D_eff24d3f-4948-41f5-b8d9-eddeac7ef83d.png" width="74" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="68"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="103"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="33"&gt;
&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;table style="background-color: black" cellspacing="0" cellpadding="2" width="665" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 1&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f02%2f30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx"&gt;&lt;font color="#ffffff"&gt;Minutes
to Midnight Countdown&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Countdown timer until midnight.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 2&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f03%2f30DaysOfNETWindowsMobileApplicationsDay02BluetoothManager.aspx"&gt;&lt;font color="#ffffff"&gt;Bluetooth
Manager&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Utility to programmatically control Bluetooth status.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 3&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f04%2f30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx"&gt;&lt;font color="#ffffff"&gt;GPS
Compass&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; GPS tools to read device’s heading from device
GPS.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 4&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f05%2f30DaysOfNETWindowsMobileApplicationsDay04MileageTracker.aspx"&gt;&lt;font color="#ffffff"&gt;Mileage
Tracker&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Application that will track vehicles mileage statistics.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 5&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f06%2f30DaysOfNETWindowsMobileApplicationsDay05MobileCapture.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
Capture&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Screenshot utility that will programmatically take
screenshots on device.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 6&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f07%2f30DaysOfNETWindowsMobileApplicationsDay06PocketPasswordGen.aspx"&gt;&lt;font color="#ffffff"&gt;Pocket
PasswordGen&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Program generates secure random passwords.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 7&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f08%2f30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
FX&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Fun application that allows user to play various
“situation” sounds.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 8&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f09%2f30DaysOfNETWindowsMobileApplicationsDay08RotateMe.aspx"&gt;&lt;font color="#ffffff"&gt;Rotate
Me&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Utility to programmatically control the device’s
orientation.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 9&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f10%2f30DaysOfNETWindowsMobileApplicationsDay09MobileTipper.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
Tipper&lt;/font&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Allows users to calculate tips quickly and easily.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 10&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f11%2f30DaysOfNETWindowsMobileApplicationsDay10WhatIsMyIP.aspx"&gt;&lt;font color="#ffffff"&gt;What
is My IP?&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Find out the IP addresses a device has in a snap.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 11&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f12%2f30DaysOfNETWindowsMobileApplicationsDay11MobileSignature.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
Signature&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Program that will capture signature from people
in the field.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 12&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f13%2f30DaysOfNETWindowsMobileApplicationsDay12MobileQuiz.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
Quiz&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Application that is designed to display created
quizzes and polls to users.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 13&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f14%2f30DaysOfNETWindowsMobileApplicationsDay13FridayThe13thNdashPocketDeathCalculator.aspx"&gt;&lt;font color="#ffffff"&gt;Pocket
Death Calculator&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Fun program that will calculate how long until
a user has left to live.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 14&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f15%2f30DaysOfNETWindowsMobileApplicationsDay14MobileSMSContact.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
SMS Contact&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Utility to allow sending of SMS text messages to
groups.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 15&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f16%2f30DaysOfNETWindowsMobileApplicationsDay15MobileSMSRemote.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
SMS Remote&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; SMS framework and application for sending SMS commands
to devices.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 16&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f17%2f30DaysOfNETWindowsMobileApplicationsDay16SMSLogger.aspx"&gt;&lt;font color="#ffffff"&gt;SMS
Logger&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Record and log all SMS text messages received by
device.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 17&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f18%2f30DaysOfNETWindowsMobileApplicationsDay17LunchOMatic.aspx"&gt;&lt;font color="#ffffff"&gt;Lunch-O-Matic&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160; Take the chore out of deciding where to eat lunch today.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 18&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f19%2f30DaysOfNETWindowsMobileApplicationsDay18MobileWeather.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
Weather&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; What will the weather be like today?&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 19&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f20%2f30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
Speedometer&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; GPS utility that will obtain current speed from
the device’s GPS.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 20&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f21%2f30DaysOfNETWindowsMobileApplicationsDay20MobileAltimeter.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
Altimeter&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; GPS utility that will read the current altitude
from GPS. &lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 21&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f22%2f30DaysOfNETWindowsMobileApplicationsDay21MobileSketcher.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
Sketcher&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Simple but powerful drawing application for Windows
Mobile.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 22&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f22%2f30DaysOfNETWindowsMobileApplicationsDay22GPSClock.aspx"&gt;&lt;font color="#ffffff"&gt;GPS
Clock&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160; GPS application that can update the device’s time from
GPS information.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 23&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay23MobileInfo.aspx"&gt;&lt;font color="#ffffff"&gt;MobileInfo&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160; Program that will read and display device related information&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 24&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx"&gt;&lt;font color="#ffffff"&gt;Mobile
Flashlight&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160; In the dark? Mobile Flashlight is here to help.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 25&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f24%2f30DaysOfNETWindowsMobileApplicationsNdashDay24MobileFlashlight.aspx"&gt;&lt;/a&gt;&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f26%2f30DaysOfNETWindowsMobileApplicationsNdashDay25SmartDial.aspx"&gt;&lt;font color="#ffffff"&gt;SmartDial&lt;/font&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160; Want to create your phone dialing interface? Start with
SmartDial.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 26&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f27%2f30DaysOfNETWindowsMobileApplicationsNdashDay26GeoCash.aspx"&gt;&lt;font color="#ffffff"&gt;GeoCash&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160; This application will log and track where you spend all
your money.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 27&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f28%2f30DaysOfNETWindowsMobileApplicationsNdashDay27Repeatr.aspx"&gt;&lt;font color="#ffffff"&gt;Repeatr&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Miss a phone call, text message, or email. This
application will remind you.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 28&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=94a2ddcb-3417-4c31-afc7-d1705492ff1b&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f28%2f30DaysOfNETWindowsMobileApplicationsNdashDay28CallBlocker.aspx"&gt;&lt;font color="#ffffff"&gt;CallBlocker&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Tired of that annoying automated marketing call?
Let CallBlocker block it.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 29&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/30/30DaysOfNETWindowsMobileApplicationsNdashDay29CommunityMegaphoneReader.aspx"&gt;&lt;font color="#ffffff"&gt;Community
Megaphone Reader&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Wondering where the closest developer event is
to you? CMR can tell you.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;Day 30&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/07/01/30DaysOfNETWindowsMobileApplicationsNdashDay30Trippr.aspx"&gt;&lt;font color="#ffffff"&gt;Trippr&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="59"&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="604"&gt;
&lt;font color="#ffffff"&gt;&amp;#160;&amp;#160; Let Tripper find geotagged photos from your location
on Flickr.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=a2c3a940-9375-4d80-af30-558ec5bfc1fe" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,a2c3a940-9375-4d80-af30-558ec5bfc1fe.aspx</comments>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=3d678cf9-e0c9-4559-bcff-be0cbd2b2624</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,3d678cf9-e0c9-4559-bcff-be0cbd2b2624.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,3d678cf9-e0c9-4559-bcff-be0cbd2b2624.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3d678cf9-e0c9-4559-bcff-be0cbd2b2624</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Yeah, we have made it through week three of my 30 Days of .NET challenge. So far,
we have 22 applications for 22 days. Thanks for your support!
</p>
        <p>
If you missed the week one recap here it is: <a href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsWeekOne.aspx">30
Days of .NET [Windows Mobile Applications] - Week One</a>.
</p>
        <p>
If you missed the week two recap here it is: <a href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsWeekTwo.aspx">30
Days of .NET [Windows Mobile Applications] - Week Two</a>.
</p>
        <p>
          <strong>What’s your favorite?</strong>
        </p>
        <p>
          <strong>
          </strong>
        </p>
        <table cellspacing="0" cellpadding="2" width="496" border="0">
          <tbody>
            <tr>
              <td valign="top" width="170">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_2.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="108">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_4.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_1.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="108">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_6.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_2.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="108">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_8.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_3.png" width="155" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="174">
                <a href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsDay15MobileSMSRemote.aspx">Mobile
SMS Remote</a>
              </td>
              <td valign="top" width="107">
                <a href="http://www.cjcraft.com/blog/2008/06/17/30DaysOfNETWindowsMobileApplicationsDay16SMSLogger.aspx">SMS
Logger</a>
              </td>
              <td valign="top" width="112">
                <a href="http://www.cjcraft.com/blog/2008/06/18/30DaysOfNETWindowsMobileApplicationsDay17LunchOMatic.aspx">Lunch-O-Matic</a>
              </td>
              <td valign="top" width="115">
                <a href="http://www.cjcraft.com/blog/2008/06/19/30DaysOfNETWindowsMobileApplicationsDay18MobileWeather.aspx">Mobile
Weather</a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
We get around, don’t we? SMS, RSS, GPS, Camera API, and more!
</p>
        <table cellspacing="0" cellpadding="2" width="597" border="0">
          <tbody>
            <tr>
              <td valign="top" width="175">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_10.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_4.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="140">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_12.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_5.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="140">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_14.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_6.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="140">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_16.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_7.png" width="156" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="178">
                <a href="http://www.cjcraft.com/blog/2008/06/20/30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx">Mobile
Speedometer</a>
              </td>
              <td valign="top" width="139">
                <a href="http://www.cjcraft.com/blog/2008/06/21/30DaysOfNETWindowsMobileApplicationsDay20MobileAltimeter.aspx">Mobile
Altimeter</a>
              </td>
              <td valign="top" width="140">
                <a href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsDay21MobileSketcher.aspx">Mobile
Sketcher</a>
              </td>
              <td valign="top" width="140">
                <a href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsDay22GPSClock.aspx">What
will be next?</a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>
          </strong>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Got an idea? Got some feedback? Share it? Thanks!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Week Three</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,3d678cf9-e0c9-4559-bcff-be0cbd2b2624.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsWeekThree.aspx</link>
      <pubDate>Sun, 22 Jun 2008 23:31:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Yeah, we have made it through week three of my 30 Days of .NET challenge. So far,
we have 22 applications for 22 days. Thanks for your support!
&lt;/p&gt;
&lt;p&gt;
If you missed the week one recap here it is: &lt;a href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsWeekOne.aspx"&gt;30
Days of .NET [Windows Mobile Applications] - Week One&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
If you missed the week two recap here it is: &lt;a href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsWeekTwo.aspx"&gt;30
Days of .NET [Windows Mobile Applications] - Week Two&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What’s your favorite?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="496" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="170"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="108"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_1.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="108"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_6.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_2.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="108"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_8.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_3.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="174"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsDay15MobileSMSRemote.aspx"&gt;Mobile
SMS Remote&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="107"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/17/30DaysOfNETWindowsMobileApplicationsDay16SMSLogger.aspx"&gt;SMS
Logger&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="112"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/18/30DaysOfNETWindowsMobileApplicationsDay17LunchOMatic.aspx"&gt;Lunch-O-Matic&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="115"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/19/30DaysOfNETWindowsMobileApplicationsDay18MobileWeather.aspx"&gt;Mobile
Weather&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
We get around, don’t we? SMS, RSS, GPS, Camera API, and more!
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="597" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="175"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_10.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_4.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="140"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_12.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_5.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="140"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_14.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_6.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="140"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_16.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsWeekThre_DA6F/image_thumb_7.png" width="156" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="178"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/20/30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx"&gt;Mobile
Speedometer&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="139"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/21/30DaysOfNETWindowsMobileApplicationsDay20MobileAltimeter.aspx"&gt;Mobile
Altimeter&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="140"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsDay21MobileSketcher.aspx"&gt;Mobile
Sketcher&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="140"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsDay22GPSClock.aspx"&gt;What
will be next?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Got an idea? Got some feedback? Share it? Thanks!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=3d678cf9-e0c9-4559-bcff-be0cbd2b2624" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,3d678cf9-e0c9-4559-bcff-be0cbd2b2624.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=2cca3ac9-30b8-4ea3-8e91-6d2e93e5b002</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,2cca3ac9-30b8-4ea3-8e91-6d2e93e5b002.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,2cca3ac9-30b8-4ea3-8e91-6d2e93e5b002.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2cca3ac9-30b8-4ea3-8e91-6d2e93e5b002</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
I couldn’t resist creating another GPS related mobile application. One of the neat
pieces of data you get from your GPS device is <strong>time</strong>. This is great.
It is like having one of the clocks that can update itself over the air by reading
data transmitted from various atomic clocks throughout the world. Many phones today
have the ability to update their time by connecting to the OEM’s time servers, but
not all. And there are still lots of Windows Mobile classic devices in the world that
do not have cellular capabilities.
</p>
        <p>
Vista has the ability to update its time by using a feature called <a href="http://windowshelp.microsoft.com/Windows/en-US/help/549bd2ed-8d98-4b4f-b600-b2fbfdef661f1033.mspx">Internet
Time</a>. Basically Vista connects to <a href="http://www.pool.ntp.org/">time.windows.com</a> and
reads a <a href="http://en.wikipedia.org/wiki/Network_Time_Protocol">Network Time
Protocol</a> server.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay22GPS_D65F/image_2.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay22GPS_D65F/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>GPS Clock</strong>
        </p>
        <p>
Our user interface is simple and direct. We are using a nice graphic to adds some
visual zing to the application. At the top of the screen we show the user their <strong>current
device time</strong> and their <strong>current GPS time</strong>.
</p>
        <p>
This allows the user to tell at a glance if they need to update their device’s time
using the <strong>Update</strong> menu option.
</p>
        <p>
On the menu we have added some simple settings features: <strong>GPS Start</strong>, <strong>GPS
Stop</strong>, <strong>About</strong>, and <strong>Exit</strong>.
</p>
        <p>
This is one of those Web 2.0 ideas where an application does one thing but does it
very well. Sometimes these are the best apps. In this case, our application provides
a bride for GPS time data to become device time data.
</p>
        <p>
Somtimes that’s all it takes to make a user happy.
</p>
        <p>
          <strong>UpdateData Method:</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 49.09%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">void</span> UpdateData(<span style="color: #0000ff">object</span> sender,
System.EventArgs args)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">if</span> (gps.Opened)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">if</span> (position
!= <span style="color: #0000ff">null</span>)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">if</span> (position.TimeValid)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> gpsTime
= position.Time;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> labelCurrentGpsDate.Text
= gpsTime.ToLongDateString();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> labelCurrentGpsTime.Text
= gpsTime.ToLongTimeString();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> }</pre>
          </div>
        </div>
        <p>
 
</p>
        <p>
          <strong>UpdateTime Method:</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 70.41%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">struct</span> SYSTEMTIME</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">short</span> Year;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">short</span> Month;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">short</span> DayOfWeek;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">short</span> Day;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">short</span> Hour;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">short</span> Minute;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">short</span> Second;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">short</span> Milliseconds;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> [DllImport(<span style="color: #006080">"coredll.dll"</span>)]</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">static</span>
              <span style="color: #0000ff">extern</span>
              <span style="color: #0000ff">bool</span> SetSystemTime(<span style="color: #0000ff">ref</span> SYSTEMTIME
time);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> UpdateTime()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span> DateTime
idag = gpsTime.ToUniversalTime();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 20:</span> SYSTEMTIME
s = <span style="color: #0000ff">new</span> SYSTEMTIME();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 21:</span> s.Year
= (<span style="color: #0000ff">short</span>) idag.Year;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 22:</span> s.Month
= (<span style="color: #0000ff">short</span>) idag.Month;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 23:</span> s.DayOfWeek
= (<span style="color: #0000ff">short</span>) idag.DayOfWeek;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 24:</span> s.Day
= (<span style="color: #0000ff">short</span>) idag.Day;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 25:</span> s.Hour
= (<span style="color: #0000ff">short</span>) idag.Hour;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 26:</span> s.Minute
= (<span style="color: #0000ff">short</span>) idag.Minute;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 27:</span> s.Second
= (<span style="color: #0000ff">short</span>) idag.Second;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 28:</span> s.Milliseconds
= (<span style="color: #0000ff">short</span>) idag.Millisecond;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 29:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 30:</span> SetSystemTime(<span style="color: #0000ff">ref</span> s);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 31:</span> }</pre>
          </div>
        </div>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
How about changing the color of the date and time if they are more than five minutes
off? Simple feature to add but really helps the user. And that’s what matters.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GpsClock.CAB">gpsClock.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GPSClock.zip">gpsClock.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=2cca3ac9-30b8-4ea3-8e91-6d2e93e5b002" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 22: GPS Clock</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,2cca3ac9-30b8-4ea3-8e91-6d2e93e5b002.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsDay22GPSClock.aspx</link>
      <pubDate>Sun, 22 Jun 2008 23:16:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I couldn’t resist creating another GPS related mobile application. One of the neat
pieces of data you get from your GPS device is &lt;strong&gt;time&lt;/strong&gt;. This is great.
It is like having one of the clocks that can update itself over the air by reading
data transmitted from various atomic clocks throughout the world. Many phones today
have the ability to update their time by connecting to the OEM’s time servers, but
not all. And there are still lots of Windows Mobile classic devices in the world that
do not have cellular capabilities.
&lt;/p&gt;
&lt;p&gt;
Vista has the ability to update its time by using a feature called &lt;a href="http://windowshelp.microsoft.com/Windows/en-US/help/549bd2ed-8d98-4b4f-b600-b2fbfdef661f1033.mspx"&gt;Internet
Time&lt;/a&gt;. Basically Vista connects to &lt;a href="http://www.pool.ntp.org/"&gt;time.windows.com&lt;/a&gt; and
reads a &lt;a href="http://en.wikipedia.org/wiki/Network_Time_Protocol"&gt;Network Time
Protocol&lt;/a&gt; server.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay22GPS_D65F/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay22GPS_D65F/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;GPS Clock&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Our user interface is simple and direct. We are using a nice graphic to adds some
visual zing to the application. At the top of the screen we show the user their &lt;strong&gt;current
device time&lt;/strong&gt; and their &lt;strong&gt;current GPS time&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
This allows the user to tell at a glance if they need to update their device’s time
using the &lt;strong&gt;Update&lt;/strong&gt; menu option.
&lt;/p&gt;
&lt;p&gt;
On the menu we have added some simple settings features: &lt;strong&gt;GPS Start&lt;/strong&gt;, &lt;strong&gt;GPS
Stop&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;, and &lt;strong&gt;Exit&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
This is one of those Web 2.0 ideas where an application does one thing but does it
very well. Sometimes these are the best apps. In this case, our application provides
a bride for GPS time data to become device time data.
&lt;/p&gt;
&lt;p&gt;
Somtimes that’s all it takes to make a user happy.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;UpdateData Method:&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 49.09%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; UpdateData(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
System.EventArgs args)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (gps.Opened)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (position
!= &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (position.TimeValid)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; gpsTime
= position.Time;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; labelCurrentGpsDate.Text
= gpsTime.ToLongDateString();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; labelCurrentGpsTime.Text
= gpsTime.ToLongTimeString();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;UpdateTime Method:&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 70.41%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;struct&lt;/span&gt; SYSTEMTIME&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;short&lt;/span&gt; Year;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;short&lt;/span&gt; Month;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;short&lt;/span&gt; DayOfWeek;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;short&lt;/span&gt; Day;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;short&lt;/span&gt; Hour;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;short&lt;/span&gt; Minute;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;short&lt;/span&gt; Second;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;short&lt;/span&gt; Milliseconds;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; [DllImport(&lt;span style="color: #006080"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; SetSystemTime(&lt;span style="color: #0000ff"&gt;ref&lt;/span&gt; SYSTEMTIME
time);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; UpdateTime()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; DateTime
idag = gpsTime.ToUniversalTime();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 20:&lt;/span&gt; SYSTEMTIME
s = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SYSTEMTIME();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 21:&lt;/span&gt; s.Year
= (&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;) idag.Year;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 22:&lt;/span&gt; s.Month
= (&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;) idag.Month;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 23:&lt;/span&gt; s.DayOfWeek
= (&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;) idag.DayOfWeek;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 24:&lt;/span&gt; s.Day
= (&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;) idag.Day;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 25:&lt;/span&gt; s.Hour
= (&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;) idag.Hour;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 26:&lt;/span&gt; s.Minute
= (&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;) idag.Minute;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 27:&lt;/span&gt; s.Second
= (&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;) idag.Second;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 28:&lt;/span&gt; s.Milliseconds
= (&lt;span style="color: #0000ff"&gt;short&lt;/span&gt;) idag.Millisecond;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 29:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 30:&lt;/span&gt; SetSystemTime(&lt;span style="color: #0000ff"&gt;ref&lt;/span&gt; s);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 31:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
How about changing the color of the date and time if they are more than five minutes
off? Simple feature to add but really helps the user. And that’s what matters.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GpsClock.CAB"&gt;gpsClock.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GPSClock.zip"&gt;gpsClock.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? Time’s running out on submitting ideas.
Be sure to get yours in soon!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=2cca3ac9-30b8-4ea3-8e91-6d2e93e5b002" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,2cca3ac9-30b8-4ea3-8e91-6d2e93e5b002.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=f10f3e92-b864-46b6-846f-997895ed7ef8</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,f10f3e92-b864-46b6-846f-997895ed7ef8.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,f10f3e92-b864-46b6-846f-997895ed7ef8.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f10f3e92-b864-46b6-846f-997895ed7ef8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
        </p>
        <p>
The main goal of 30 Days of .NET was to create a series of applications, any of which,
a reader could take and use as a springboard to creating their first application.
Well that, and to have some fun along the way and get more people excited about mobile
development. A secondary goal of mine has been to show off various capabilities of
mobile devices like GPS, Bluetooth, and multimedia features. One feature we haven’t
covered so far is using a built-in camera.
</p>
        <p>
Today we will mark that item off our list…
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay21Mob_105D8/image_4.png">
            <img title="image" style="margin: 5px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay21Mob_105D8/image_thumb_1.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Mobile Sketcher</strong>
        </p>
        <p>
The goal is to create a basic drawing application, but add a mobile twist to it. On
the menu, I have added a menu item for selecting a picture using the select picture
dialog. The nice thing about the select picture dialog is it allows you to use your
camera to take a picture and then select it as your picture.
</p>
        <p>
In a way this application is a lot like the mobile signature capture application we
did a while back, but there are some important differences: picture selection support,
camera support, save file dialog support, and more. The business case for this application
is something like the following: an insurance agent arrives on the scene of an automotive
accident, she takes a picture using Mobile Sketcher and then adds notes and sketches
to the picture for claims processing.
</p>
        <p>
So users can select a picture from their device or take a picture and use it for their
background. And then they can draw and edit the picture using Mobile Sketcher. At
the bottom of the screen we allow user to select different colors for the pen’s ink:
red, orange, yellow, green, blue, brown, white, and black. Well okay, white is really
a light gray since white on white is hard to see.
</p>
        <p>
          <strong>SelectPicture Method:</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 69.07%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 196px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> SelectPicture()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> SelectPictureDialog
selectPictureDialog = <span style="color: #0000ff">new</span> SelectPictureDialog();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> DialogResult
dialogResult = selectPictureDialog.ShowDialog();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #0000ff">if</span> (dialogResult
!= DialogResult.OK)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">return</span>;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> pictureBox.Image
= <span style="color: #0000ff">new</span> Bitmap(selectPictureDialog.FileName);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> }</pre>
          </div>
        </div>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
There is lots of room for improvement with this application. Just think of all the
features most drawing programs have and there’s your list for improvements.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSketcher.CAB" target="_blank">mobileSketcher.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSketcher.zip" target="_blank">mobileSketcher.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? The managed API for using a Window Mobile
camera is a great feature that is very powerful and very easy. Use it in your next
mobile application or your first.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=f10f3e92-b864-46b6-846f-997895ed7ef8" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 21: Mobile Sketcher</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,f10f3e92-b864-46b6-846f-997895ed7ef8.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/22/30DaysOfNETWindowsMobileApplicationsDay21MobileSketcher.aspx</link>
      <pubDate>Sun, 22 Jun 2008 06:17:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The main goal of 30 Days of .NET was to create a series of applications, any of which,
a reader could take and use as a springboard to creating their first application.
Well that, and to have some fun along the way and get more people excited about mobile
development. A secondary goal of mine has been to show off various capabilities of
mobile devices like GPS, Bluetooth, and multimedia features. One feature we haven’t
covered so far is using a built-in camera.
&lt;/p&gt;
&lt;p&gt;
Today we will mark that item off our list…
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay21Mob_105D8/image_4.png"&gt;&lt;img title="image" style="margin: 5px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay21Mob_105D8/image_thumb_1.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mobile Sketcher&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The goal is to create a basic drawing application, but add a mobile twist to it. On
the menu, I have added a menu item for selecting a picture using the select picture
dialog. The nice thing about the select picture dialog is it allows you to use your
camera to take a picture and then select it as your picture.
&lt;/p&gt;
&lt;p&gt;
In a way this application is a lot like the mobile signature capture application we
did a while back, but there are some important differences: picture selection support,
camera support, save file dialog support, and more. The business case for this application
is something like the following: an insurance agent arrives on the scene of an automotive
accident, she takes a picture using Mobile Sketcher and then adds notes and sketches
to the picture for claims processing.
&lt;/p&gt;
&lt;p&gt;
So users can select a picture from their device or take a picture and use it for their
background. And then they can draw and edit the picture using Mobile Sketcher. At
the bottom of the screen we allow user to select different colors for the pen’s ink:
red, orange, yellow, green, blue, brown, white, and black. Well okay, white is really
a light gray since white on white is hard to see.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;SelectPicture Method:&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 69.07%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 196px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; SelectPicture()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; SelectPictureDialog
selectPictureDialog = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SelectPictureDialog();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; DialogResult
dialogResult = selectPictureDialog.ShowDialog();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (dialogResult
!= DialogResult.OK)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; pictureBox.Image
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Bitmap(selectPictureDialog.FileName);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
There is lots of room for improvement with this application. Just think of all the
features most drawing programs have and there’s your list for improvements.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSketcher.CAB" target="_blank"&gt;mobileSketcher.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSketcher.zip" target="_blank"&gt;mobileSketcher.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? The managed API for using a Window Mobile
camera is a great feature that is very powerful and very easy. Use it in your next
mobile application or your first.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=f10f3e92-b864-46b6-846f-997895ed7ef8" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,f10f3e92-b864-46b6-846f-997895ed7ef8.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=5cd6f7c8-e248-465f-a3aa-af962e36e7f5</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,5cd6f7c8-e248-465f-a3aa-af962e36e7f5.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,5cd6f7c8-e248-465f-a3aa-af962e36e7f5.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5cd6f7c8-e248-465f-a3aa-af962e36e7f5</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Yesterday, I had a really hard time between choosing to do a <a href="http://www.cjcraft.com/blog/2008/06/20/30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx" target="_blank">Mobile
Speedometer</a> or a Mobile Altimeter. But another day gives us another opportunity,
and today we shall create the Mobile Altimeter.
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay20Mob_14531/image_2.png">
            <img title="image" style="margin: 5px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay20Mob_14531/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
          <strong>Mobile Altimeter</strong>
        </p>
        <p>
This will make the third application in the 30 Days of .NET series that has had targeted
GPS capabilities. We have created a <a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f04%2f30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx" target="_blank">compass</a>,
a <a href="http://www.cjcraft.com/blog/2008/06/20/30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx" target="_blank">speedometer</a>,
and now a altimeter. And there are still dozens of applications we could create with
the GPS capabilities of Windows Mobile.
</p>
        <p>
This time I decided to a little more with the UI. We have a background that symbolizes
“altitude” which is appealing to end users. Plus it gives the program a lot of style
and class. On the left side of the screen if you look carefully, you will notice we
have an attitude ruler, which has a marker that rises one pixel for every foot higher
the device travels up to 180 feet.
</p>
        <p>
This simple feature really takes our application up to the next level. :D (Yeah, I
know: I’m terrible.)
</p>
        <p>
At the bottom of the screen we are allowing the user to read all the main stats off
the GPS so the application is even more useful. We show altitude in a large bold font
in the middle of the screen for impact.
</p>
        <p>
The main event: <strong>UpdateData</strong></p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 63.38%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">void</span> UpdateData(<span style="color: #0000ff">object</span> sender,
System.EventArgs args)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">if</span> (gps.Opened)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">if</span> (position
!= <span style="color: #0000ff">null</span>)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">if</span> (position.SeaLevelAltitudeValid)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> labelAltitude.Text
= position.SeaLevelAltitude.ToString(<span style="color: #006080">"0.00ft"</span>);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span>
              <span style="color: #0000ff">if</span> (position.SeaLevelAltitude
&gt;= 0 &amp;&amp; position.SeaLevelAltitude &lt;= 180)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> pictureBoxArrow.Top
= 173 - (<span style="color: #0000ff">int</span>) position.SeaLevelAltitude;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span>
              <span style="color: #0000ff">else</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> pictureBoxArrow.Top
= 173;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span> }</pre>
          </div>
        </div>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
I think a more realistic UI would be a great improvement. And the ability to switch
from miles to kilometers would be good too. If the odometer would track miles traveled
that would be an awesome enhancement.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileAltimeter.CAB" target="_blank">mobileAltimeter.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileAltimeter.zip" target="_blank">mobileAltimeter.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see? There’s been a lot of demand for GPS related
applications. Does that help?
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=5cd6f7c8-e248-465f-a3aa-af962e36e7f5" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 20: Mobile Altimeter</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,5cd6f7c8-e248-465f-a3aa-af962e36e7f5.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/21/30DaysOfNETWindowsMobileApplicationsDay20MobileAltimeter.aspx</link>
      <pubDate>Sat, 21 Jun 2008 07:07:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Yesterday, I had a really hard time between choosing to do a &lt;a href="http://www.cjcraft.com/blog/2008/06/20/30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx" target="_blank"&gt;Mobile
Speedometer&lt;/a&gt; or a Mobile Altimeter. But another day gives us another opportunity,
and today we shall create the Mobile Altimeter.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay20Mob_14531/image_2.png"&gt;&lt;img title="image" style="margin: 5px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay20Mob_14531/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mobile Altimeter&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This will make the third application in the 30 Days of .NET series that has had targeted
GPS capabilities. We have created a &lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f04%2f30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx" target="_blank"&gt;compass&lt;/a&gt;,
a &lt;a href="http://www.cjcraft.com/blog/2008/06/20/30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx" target="_blank"&gt;speedometer&lt;/a&gt;,
and now a altimeter. And there are still dozens of applications we could create with
the GPS capabilities of Windows Mobile.
&lt;/p&gt;
&lt;p&gt;
This time I decided to a little more with the UI. We have a background that symbolizes
“altitude” which is appealing to end users. Plus it gives the program a lot of style
and class. On the left side of the screen if you look carefully, you will notice we
have an attitude ruler, which has a marker that rises one pixel for every foot higher
the device travels up to 180 feet.
&lt;/p&gt;
&lt;p&gt;
This simple feature really takes our application up to the next level. :D (Yeah, I
know: I’m terrible.)
&lt;/p&gt;
&lt;p&gt;
At the bottom of the screen we are allowing the user to read all the main stats off
the GPS so the application is even more useful. We show altitude in a large bold font
in the middle of the screen for impact.
&lt;/p&gt;
&lt;p&gt;
The main event: &lt;strong&gt;UpdateData&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 63.38%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; UpdateData(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
System.EventArgs args)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (gps.Opened)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (position
!= &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (position.SeaLevelAltitudeValid)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; labelAltitude.Text
= position.SeaLevelAltitude.ToString(&lt;span style="color: #006080"&gt;&amp;quot;0.00ft&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (position.SeaLevelAltitude
&amp;gt;= 0 &amp;amp;&amp;amp; position.SeaLevelAltitude &amp;lt;= 180)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; pictureBoxArrow.Top
= 173 - (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) position.SeaLevelAltitude;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; pictureBoxArrow.Top
= 173;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I think a more realistic UI would be a great improvement. And the ability to switch
from miles to kilometers would be good too. If the odometer would track miles traveled
that would be an awesome enhancement.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileAltimeter.CAB" target="_blank"&gt;mobileAltimeter.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileAltimeter.zip" target="_blank"&gt;mobileAltimeter.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see? There’s been a lot of demand for GPS related
applications. Does that help?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=5cd6f7c8-e248-465f-a3aa-af962e36e7f5" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,5cd6f7c8-e248-465f-a3aa-af962e36e7f5.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=123d7055-26d6-4697-85ad-423a477e870b</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,123d7055-26d6-4697-85ad-423a477e870b.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,123d7055-26d6-4697-85ad-423a477e870b.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=123d7055-26d6-4697-85ad-423a477e870b</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After the last GPS related application, <a href="http://www.cjcraft.com/blog/2008/06/04/30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx" target="_blank">GPS
Compass</a>, I’ve been wanting to do another GPS focused application. This time I
figured we’d get in the driver’s seat with our friend: <strong><font color="#ff8000">SPEED</font></strong>.
</p>
        <p>
Gentlemen, start your engines…
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay19Mob_1315E/image_2.png">
            <img title="image" style="margin: 5px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay19Mob_1315E/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Mobile Speedometer</strong>
        </p>
        <p align="left">
The application is built off of  <a href="http://www.cjcraft.com/blog/ct.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d&amp;url=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3ffamilyid%3d06111A3A-A651-4745-88EF-3D48091A390B" target="_blank">Windows
Mobile 6 SDK</a> included a <a href="http://www.cjcraft.com/blog/ct.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb158699.aspx" target="_blank">GPS
Application</a> in the samples folder, <strong>C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS</strong>.
</p>
        <p align="left">
This uses the <a href="http://www.cjcraft.com/blog/ct.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms850332.aspx">GPS
Intermediate Driver</a>. If you are writing a location aware application for Windows
Mobile this is definitely the way to go. ;)
</p>
        <p align="left">
The main UI is located at the top of the screen. We have a simple speedometer graphic
in the background to add some flair to the application. On top of this we overlay
the current speed based off of information returned from the GPS device. We can also
use <a href="http://www.cjcraft.com/blog/ct.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb158722.aspx" target="_blank">Fake
GPS</a> to simulate a GPS device.
</p>
        <p align="left">
Below this we have a readout of various GPS statistics that are updated continuously.
</p>
        <p align="left">
One thing to note is Speed may be return in knots which you will likely want to convert
to either miles or kilometers.
</p>
        <p align="left">
 
</p>
        <p align="left">
 
</p>
        <p align="left">
 
</p>
        <p align="left">
 
</p>
        <p align="left">
We just need to create a method something like UpdateData below.
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 57.64%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">void</span> UpdateData(<span style="color: #0000ff">object</span> sender,
System.EventArgs args)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">if</span> (gps.Opened)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">if</span> (position
!= <span style="color: #0000ff">null</span>)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">if</span> (position.SpeedValid)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> labelSpeed.Text
= (position.Speed/1.15077945).ToString(<span style="color: #006080">"0.00"</span>);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> }</pre>
          </div>
        </div>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
I think a more realistic UI would be a great improvement. And the ability to switch
from miles to kilometers would be good too. If the odometer would track miles traveled
that would be an awesome enhancement.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSpeedometer.CAB" target="_blank">mobileSpeedometer.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSpeedometer.zip" target="_blank">mobileSpeedometer.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Want more? What else would you like to see?
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=123d7055-26d6-4697-85ad-423a477e870b" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 19: Mobile Speedometer</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,123d7055-26d6-4697-85ad-423a477e870b.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/20/30DaysOfNETWindowsMobileApplicationsDay19MobileSpeedometer.aspx</link>
      <pubDate>Fri, 20 Jun 2008 05:53:00 GMT</pubDate>
      <description>&lt;p&gt;
After the last GPS related application, &lt;a href="http://www.cjcraft.com/blog/2008/06/04/30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx" target="_blank"&gt;GPS
Compass&lt;/a&gt;, I’ve been wanting to do another GPS focused application. This time I
figured we’d get in the driver’s seat with our friend: &lt;strong&gt;&lt;font color="#ff8000"&gt;SPEED&lt;/font&gt;&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Gentlemen, start your engines…
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay19Mob_1315E/image_2.png"&gt;&lt;img title="image" style="margin: 5px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay19Mob_1315E/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mobile Speedometer&lt;/strong&gt;
&lt;/p&gt;
&lt;p align="left"&gt;
The application is built off of&amp;#160; &lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3ffamilyid%3d06111A3A-A651-4745-88EF-3D48091A390B" target="_blank"&gt;Windows
Mobile 6 SDK&lt;/a&gt; included a &lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb158699.aspx" target="_blank"&gt;GPS
Application&lt;/a&gt; in the samples folder, &lt;strong&gt;C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS&lt;/strong&gt;.
&lt;/p&gt;
&lt;p align="left"&gt;
This uses the &lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms850332.aspx"&gt;GPS
Intermediate Driver&lt;/a&gt;. If you are writing a location aware application for Windows
Mobile this is definitely the way to go. ;)
&lt;/p&gt;
&lt;p align="left"&gt;
The main UI is located at the top of the screen. We have a simple speedometer graphic
in the background to add some flair to the application. On top of this we overlay
the current speed based off of information returned from the GPS device. We can also
use &lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb158722.aspx" target="_blank"&gt;Fake
GPS&lt;/a&gt; to simulate a GPS device.
&lt;/p&gt;
&lt;p align="left"&gt;
Below this we have a readout of various GPS statistics that are updated continuously.
&lt;/p&gt;
&lt;p align="left"&gt;
One thing to note is Speed may be return in knots which you will likely want to convert
to either miles or kilometers.
&lt;/p&gt;
&lt;p align="left"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p align="left"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p align="left"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p align="left"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p align="left"&gt;
We just need to create a method something like UpdateData below.
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 57.64%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; UpdateData(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
System.EventArgs args)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (gps.Opened)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (position
!= &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (position.SpeedValid)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; labelSpeed.Text
= (position.Speed/1.15077945).ToString(&lt;span style="color: #006080"&gt;&amp;quot;0.00&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I think a more realistic UI would be a great improvement. And the ability to switch
from miles to kilometers would be good too. If the odometer would track miles traveled
that would be an awesome enhancement.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSpeedometer.CAB" target="_blank"&gt;mobileSpeedometer.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSpeedometer.zip" target="_blank"&gt;mobileSpeedometer.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Want more? What else would you like to see?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=123d7055-26d6-4697-85ad-423a477e870b" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,123d7055-26d6-4697-85ad-423a477e870b.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>PDANUG</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=e3af435b-e033-472b-8fde-da0ebe4a2894</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,e3af435b-e033-472b-8fde-da0ebe4a2894.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,e3af435b-e033-472b-8fde-da0ebe4a2894.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e3af435b-e033-472b-8fde-da0ebe4a2894</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
How'd we make it this far without a weather application? I must admit its hard to
buy anything these days that doesn’t have a weather feature built in. But does everyone
understand the basic of writing such an application? That’s what we will explore today.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay18Mob_14390/image_2.png">
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay18Mob_14390/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Mobile Weather</strong>
        </p>
        <p>
UI is a little plain. I really think a weather application needs to have a top notch
exciting UI, but we’ll keep it simple this time. We have an input section at the top
that takes the user’s ZIP Code, and we have an output section at the bottom.
</p>
        <p>
In the output section we have some basic factoids like current conditions and temperature.
We also have a forecast for the next day showing date, description, with high and
low temperature. And finally we have a graphic to add a little something to an otherwise
drab application.
</p>
        <p>
How did we mine this information. Basically I connected to a public weather RSS feed
that takes zip code as an URL parameter, using an <strong>HttpWebRespone</strong> object.
I then parsed out the data I need using regular expressions.
</p>
        <p>
There are other ways of doing this type of thing, but I thought this would allow us
to use a lot of neat Window Mobile technologies we haven’t explorer before.
</p>
        <p>
          <strong>Our friend the HttpWebResponse:</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 58.03%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> RefreshData()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">string</span> lcUrl
= <span style="color: #006080">"http://weather.yahooapis.com/forecastrss?p="</span> +
textBoxZipCode.Text.TrimEnd();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #008000">//
*** Establish the request </span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> HttpWebRequest
loHttp = (HttpWebRequest)WebRequest.Create(lcUrl);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>
              <span style="color: #008000">//
*** Set properties</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> loHttp.Timeout
= 10000; <span style="color: #008000">// 10 secs</span></pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span>
              <span style="color: #008000">//
*** Retrieve request info headers</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> HttpWebResponse
loWebResponse = (HttpWebResponse)loHttp.GetResponse();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> Encoding
enc = Encoding.GetEncoding(1252); <span style="color: #008000">// Windows default
Code Page</span></pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> StreamReader
loResponseStream = <span style="color: #0000ff">new</span> StreamReader(loWebResponse.GetResponseStream(),
enc);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span>
              <span style="color: #0000ff">string</span> lcHtml
= loResponseStream.ReadToEnd();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 20:</span> RefreshScreen(lcHtml);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 21:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 22:</span> loWebResponse.Close();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 23:</span> loResponseStream.Close();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 24:</span> }</pre>
          </div>
        </div>
        <p>
 
</p>
        <p>
          <strong>Last but not least the Regex object:</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">string</span> conditionsEx
= <span style="color: #006080">@"&lt;yweather:condition text="</span><span style="color: #006080">"(?&lt;desc&gt;[^@]+)"</span><span style="color: #006080">"
code="</span><span style="color: #006080">"(?&lt;code&gt;[^@]+)"</span><span style="color: #006080">"
temp="</span><span style="color: #006080">"(?&lt;temp&gt;[^@]+)"</span><span style="color: #006080">"
date="</span><span style="color: #006080">"(?&lt;junk&gt;[^@]+)"</span><span style="color: #006080">"
"</span>;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> Regex
regEx = <span style="color: #0000ff">new</span> Regex(conditionsEx);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span> Match
m = regEx.Match(input);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">if</span>(m.Success)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> desc
= m.Groups[<span style="color: #006080">"desc"</span>].Value;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> temp
= m.Groups[<span style="color: #006080">"temp"</span>].Value;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> }</pre>
          </div>
        </div>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
The UI needs more polish, but it is useable. There is even more data in this RSS feed
than I’m exposing so that is another way to expand on this project and make something
awesome.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileWeather.CAB">mobileWeather.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileWeather.zip">mobileWeather.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
How could we make this application even better? Share your ideas with the community.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e3af435b-e033-472b-8fde-da0ebe4a2894" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 18: Mobile Weather</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,e3af435b-e033-472b-8fde-da0ebe4a2894.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/19/30DaysOfNETWindowsMobileApplicationsDay18MobileWeather.aspx</link>
      <pubDate>Thu, 19 Jun 2008 06:59:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
How'd we make it this far without a weather application? I must admit its hard to
buy anything these days that doesn’t have a weather feature built in. But does everyone
understand the basic of writing such an application? That’s what we will explore today.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay18Mob_14390/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay18Mob_14390/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mobile Weather&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
UI is a little plain. I really think a weather application needs to have a top notch
exciting UI, but we’ll keep it simple this time. We have an input section at the top
that takes the user’s ZIP Code, and we have an output section at the bottom.
&lt;/p&gt;
&lt;p&gt;
In the output section we have some basic factoids like current conditions and temperature.
We also have a forecast for the next day showing date, description, with high and
low temperature. And finally we have a graphic to add a little something to an otherwise
drab application.
&lt;/p&gt;
&lt;p&gt;
How did we mine this information. Basically I connected to a public weather RSS feed
that takes zip code as an URL parameter, using an &lt;strong&gt;HttpWebRespone&lt;/strong&gt; object.
I then parsed out the data I need using regular expressions.
&lt;/p&gt;
&lt;p&gt;
There are other ways of doing this type of thing, but I thought this would allow us
to use a lot of neat Window Mobile technologies we haven’t explorer before.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Our friend the HttpWebResponse:&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 58.03%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RefreshData()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; lcUrl
= &lt;span style="color: #006080"&gt;&amp;quot;http://weather.yahooapis.com/forecastrss?p=&amp;quot;&lt;/span&gt; +
textBoxZipCode.Text.TrimEnd();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
*** Establish the request &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; HttpWebRequest
loHttp = (HttpWebRequest)WebRequest.Create(lcUrl);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
*** Set properties&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; loHttp.Timeout
= 10000; &lt;span style="color: #008000"&gt;// 10 secs&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
*** Retrieve request info headers&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; HttpWebResponse
loWebResponse = (HttpWebResponse)loHttp.GetResponse();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; Encoding
enc = Encoding.GetEncoding(1252); &lt;span style="color: #008000"&gt;// Windows default
Code Page&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; StreamReader
loResponseStream = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StreamReader(loWebResponse.GetResponseStream(),
enc);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; lcHtml
= loResponseStream.ReadToEnd();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 20:&lt;/span&gt; RefreshScreen(lcHtml);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 21:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 22:&lt;/span&gt; loWebResponse.Close();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 23:&lt;/span&gt; loResponseStream.Close();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 24:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Last but not least the Regex object:&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; conditionsEx
= &lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;yweather:condition text=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;(?&amp;lt;desc&amp;gt;[^@]+)&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;
code=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;(?&amp;lt;code&amp;gt;[^@]+)&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;
temp=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;(?&amp;lt;temp&amp;gt;[^@]+)&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;
date=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;(?&amp;lt;junk&amp;gt;[^@]+)&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;
&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; Regex
regEx = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Regex(conditionsEx);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; Match
m = regEx.Match(input);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(m.Success)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; desc
= m.Groups[&lt;span style="color: #006080"&gt;&amp;quot;desc&amp;quot;&lt;/span&gt;].Value;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; temp
= m.Groups[&lt;span style="color: #006080"&gt;&amp;quot;temp&amp;quot;&lt;/span&gt;].Value;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The UI needs more polish, but it is useable. There is even more data in this RSS feed
than I’m exposing so that is another way to expand on this project and make something
awesome.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileWeather.CAB"&gt;mobileWeather.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileWeather.zip"&gt;mobileWeather.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
How could we make this application even better? Share your ideas with the community.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e3af435b-e033-472b-8fde-da0ebe4a2894" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,e3af435b-e033-472b-8fde-da0ebe4a2894.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=842d5282-79ff-4b50-bc2e-9922646e7f66</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,842d5282-79ff-4b50-bc2e-9922646e7f66.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,842d5282-79ff-4b50-bc2e-9922646e7f66.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=842d5282-79ff-4b50-bc2e-9922646e7f66</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Being a geek, I have a lot of geek friends. Being friends, we tend to eat lunch together.
The only problem is sometimes we have a hard time deciding where to go to eat lunch.
This invariably leads to the “Where do you wanna eat?”, “I dunno, where do you wanna
eat go?”, “It doesn’t matter to me, you decide.” Well here is a simple solution to
this daily dilemma:
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay17Lun_127AD/image_2.png">
            <img title="image" style="margin: 5px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay17Lun_127AD/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Lunch-O-Matic</strong>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Our UI has just enough class to be exciting and interesting, yet simple enough not
to cause us too much grief. Seek balance in all things. The concept: restaurant logos
flash across the screen, eventually stopping on the chosen food establishment. The
application is visual, which is appealing. The application is clear. The user can
easily tell which restaurant is chosen by following the ginormous arrow. A light blue
background give the app a little warm and the arrow adds character.
</p>
        <p>
We have a folder called <strong>LunchLogos</strong>. Any png file found is the folder
is added to an generic image list at the start of the program. When the user clicks <strong>Spin</strong>,
the logos are randomly displayed on the screen for a random number of times before
stopping on a chosen eatery. 
</p>
        <p>
If you don’t like a restaurant all you have to do is remove the logo from the folder.
If you have a restaurant you like that isn’t in the list all you have to do is add
the logo to the same folder, simple, simple.
</p>
        <p>
Again for this application we used the <strong>RNGCryptoServiceProvider</strong> class
to generate a statistically sound random number. 
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 56.37%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">int</span> GetRandomNumber(<span style="color: #0000ff">int</span> minValue, <span style="color: #0000ff">int</span> maxValue)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #008000">//
Use a 4-byte array to fill it with random bytes and convert it then</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>
              <span style="color: #008000">//
to an integer value.</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">byte</span>[]
randomBytes = <span style="color: #0000ff">new</span><span style="color: #0000ff">byte</span>[4];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #008000">//
Generate 4 random bytes.</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> RNGCryptoServiceProvider
rng = <span style="color: #0000ff">new</span> RNGCryptoServiceProvider();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> rng.GetBytes(randomBytes);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span>
              <span style="color: #008000">//
Convert 4 bytes into a 32-bit integer value.</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span>
              <span style="color: #0000ff">int</span> seed
= (randomBytes[0] &amp; 0x7f) &lt;&lt; 24 |</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> randomBytes[1]
&lt;&lt; 16 |</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> randomBytes[2]
&lt;&lt; 8 |</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span> randomBytes[3];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span>
              <span style="color: #008000">//
Now, this is real randomization.</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span> Random
random = <span style="color: #0000ff">new</span> Random(seed);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 20:</span>
              <span style="color: #0000ff">return</span> random.Next(minValue,
maxValue);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 21:</span> }</pre>
          </div>
        </div>
        <p>
And we have created a simple randomize list function to mix things up a bit.
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">void</span> RandomizeList(List&lt;<span style="color: #0000ff">string</span>&gt;
arrayList)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>
              <span style="color: #0000ff">if</span> (arrayList
== <span style="color: #0000ff">null</span>) { <span style="color: #0000ff">return</span>;
}</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">int</span> count
= arrayList.Count;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i
= 0; i &lt; count; i++)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>
              <span style="color: #0000ff">string</span> tmp
= arrayList[i];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> arrayList.RemoveAt(i);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> arrayList.Insert(GetRandomNumber(0,
count), tmp);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> }</pre>
          </div>
        </div>
        <p>
Last but not least, we use the Mod function to make sure we can loop around the list
when picking images.
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> Spin()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">int</span> index1
= GetRandomNumber(0, logos.Count);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>
              <span style="color: #0000ff">int</span> index2
= (index1 + 1) % logos.Count;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">int</span> index3
= (index2 + 1) % logos.Count;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> pictureBoxTop.Image
= logos[index1];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> pictureBox.Image
= logos[index2];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> pictureBoxBottom.Image
= logos[index3];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> }</pre>
          </div>
        </div>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
Well, I think it would be cool if there was a background sound to go along with the
spin. I also think a UI for adding and deleting logos would be great. It would be
nice to be able to assign weights to each restaurant, and to favor new choices over
previously selected places.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/LunchOMatic.CAB" target="_blank">lunchomatic.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/LunchOMatic.zip" target="_blank">lunchomatic.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
How could we make this application even better? Share your ideas with the community.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=842d5282-79ff-4b50-bc2e-9922646e7f66" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 17: Lunch-O-Matic</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,842d5282-79ff-4b50-bc2e-9922646e7f66.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/18/30DaysOfNETWindowsMobileApplicationsDay17LunchOMatic.aspx</link>
      <pubDate>Wed, 18 Jun 2008 05:11:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Being a geek, I have a lot of geek friends. Being friends, we tend to eat lunch together.
The only problem is sometimes we have a hard time deciding where to go to eat lunch.
This invariably leads to the “Where do you wanna eat?”, “I dunno, where do you wanna
eat go?”, “It doesn’t matter to me, you decide.” Well here is a simple solution to
this daily dilemma:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay17Lun_127AD/image_2.png"&gt;&lt;img title="image" style="margin: 5px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay17Lun_127AD/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Lunch-O-Matic&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Our UI has just enough class to be exciting and interesting, yet simple enough not
to cause us too much grief. Seek balance in all things. The concept: restaurant logos
flash across the screen, eventually stopping on the chosen food establishment. The
application is visual, which is appealing. The application is clear. The user can
easily tell which restaurant is chosen by following the ginormous arrow. A light blue
background give the app a little warm and the arrow adds character.
&lt;/p&gt;
&lt;p&gt;
We have a folder called &lt;strong&gt;LunchLogos&lt;/strong&gt;. Any png file found is the folder
is added to an generic image list at the start of the program. When the user clicks &lt;strong&gt;Spin&lt;/strong&gt;,
the logos are randomly displayed on the screen for a random number of times before
stopping on a chosen eatery. 
&lt;/p&gt;
&lt;p&gt;
If you don’t like a restaurant all you have to do is remove the logo from the folder.
If you have a restaurant you like that isn’t in the list all you have to do is add
the logo to the same folder, simple, simple.
&lt;/p&gt;
&lt;p&gt;
Again for this application we used the &lt;strong&gt;RNGCryptoServiceProvider&lt;/strong&gt; class
to generate a statistically sound random number. 
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 56.37%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; GetRandomNumber(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; minValue, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; maxValue)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Use a 4-byte array to fill it with random bytes and convert it then&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
to an integer value.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[]
randomBytes = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[4];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Generate 4 random bytes.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; RNGCryptoServiceProvider
rng = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RNGCryptoServiceProvider();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; rng.GetBytes(randomBytes);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Convert 4 bytes into a 32-bit integer value.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; seed
= (randomBytes[0] &amp;amp; 0x7f) &amp;lt;&amp;lt; 24 |&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; randomBytes[1]
&amp;lt;&amp;lt; 16 |&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; randomBytes[2]
&amp;lt;&amp;lt; 8 |&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; randomBytes[3];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Now, this is real randomization.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; Random
random = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Random(seed);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 20:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; random.Next(minValue,
maxValue);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 21:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
And we have created a simple randomize list function to mix things up a bit.
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RandomizeList(List&amp;lt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;gt;
arrayList)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (arrayList
== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;
}&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; count
= arrayList.Count;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i
= 0; i &amp;lt; count; i++)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; tmp
= arrayList[i];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; arrayList.RemoveAt(i);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; arrayList.Insert(GetRandomNumber(0,
count), tmp);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Last but not least, we use the Mod function to make sure we can loop around the list
when picking images.
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Spin()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; index1
= GetRandomNumber(0, logos.Count);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; index2
= (index1 + 1) % logos.Count;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; index3
= (index2 + 1) % logos.Count;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; pictureBoxTop.Image
= logos[index1];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; pictureBox.Image
= logos[index2];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; pictureBoxBottom.Image
= logos[index3];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Well, I think it would be cool if there was a background sound to go along with the
spin. I also think a UI for adding and deleting logos would be great. It would be
nice to be able to assign weights to each restaurant, and to favor new choices over
previously selected places.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/LunchOMatic.CAB" target="_blank"&gt;lunchomatic.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/LunchOMatic.zip" target="_blank"&gt;lunchomatic.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
How could we make this application even better? Share your ideas with the community.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=842d5282-79ff-4b50-bc2e-9922646e7f66" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,842d5282-79ff-4b50-bc2e-9922646e7f66.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=4274cf6f-23a8-491d-819f-b66aa663d6aa</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,4274cf6f-23a8-491d-819f-b66aa663d6aa.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,4274cf6f-23a8-491d-819f-b66aa663d6aa.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4274cf6f-23a8-491d-819f-b66aa663d6aa</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
I’ve had a lot of requests for SMS related applications. So today we will create a
SMS logger application. This application will allow users to scroll through a listing
of all the SMS / text messages they have received while the application has been running.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay16SMS_11D4D/image_2.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay16SMS_11D4D/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>SMS Logger</strong>
        </p>
        <p>
This is a great application for a beginner to create. It has a very simple UI, the
main component is the WebBrowser. The way we can have nicely formatted text easily. 
</p>
        <p>
The key piece of code here is the MessageRecieved event off of the SmsIntercepter
object.
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 52.13%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span> StringBuilder
documentText = <span style="color: #0000ff">new</span> StringBuilder();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span>
              <span style="color: #0000ff">void</span> SmsInterceptor_MessageReceived(<span style="color: #0000ff">object</span> sender,
MessageInterceptorEventArgs e)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>
              <span style="color: #0000ff">if</span> (enableInterceptor
== <span style="color: #0000ff">false</span>)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">return</span>;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #008000">//
Cast to SmsMessage to access message body</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>
              <span style="color: #008000">//
Not expecting to receive any non-SMS messages but use "as" to</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span>
              <span style="color: #008000">//
cast to be extra safe</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> SmsMessage
newMessage = e.Message <span style="color: #0000ff">as</span> SmsMessage;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span>
              <span style="color: #0000ff">if</span> (newMessage
!= <span style="color: #0000ff">null</span>)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> documentText.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Body:&lt;/b&gt;
{0}&lt;br/&gt;"</span>, newMessage.Body);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> documentText.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Name:&lt;/b&gt;
{0}&lt;br/&gt;"</span>, newMessage.From.Name);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span> documentText.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Address:&lt;/b&gt;
{0}&lt;br/&gt;"</span>, newMessage.From.Address);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> documentText.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Last
Modified:&lt;/b&gt; {0}&lt;br/&gt;"</span>, newMessage.LastModified);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span> documentText.AppendFormat(<span style="color: #006080">@"&lt;b&gt;Received:&lt;/b&gt;
{0}&lt;br/&gt;"</span>, newMessage.Received);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span> documentText.Append(<span style="color: #006080">@"&lt;br/&gt;"</span>);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 20:</span> webBrowser.DocumentText
= documentText.ToString();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 21:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 22:</span> }</pre>
          </div>
        </div>
        <p>
We have a few actions the user do: <strong>Start</strong>, <strong>Stop</strong>, <strong>Clear</strong>, <strong>About</strong>,
and <strong>Exit</strong>.
</p>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
This application logs incoming SMS messages, but it doesn’t do several thing that
were requested from our reader. It doesn’t log outgoing messages. It doesn’t save
to a text file. And it doesn’t clear out data from Outlook Mobile when the users runs
SMS Logger.
</p>
        <p>
I also think there is room to improve the UI. I think some small 16x16 pixel graphic
files could really add some life to the application. Maybe one icon for incoming messages,
and one for outgoing messages.
</p>
        <p>
So who’s up to it? Anyone want to take this application to the next level? Just let
me know.
</p>
        <p>
 
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/SmsLogger.cab">smsLogger.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/SmsLogger.zip">smsLogger.zip</a></p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
So what possibilities do you see for this type of application? for business? for entertainment?
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=4274cf6f-23a8-491d-819f-b66aa663d6aa" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 16: SMS Logger</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,4274cf6f-23a8-491d-819f-b66aa663d6aa.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/17/30DaysOfNETWindowsMobileApplicationsDay16SMSLogger.aspx</link>
      <pubDate>Tue, 17 Jun 2008 03:30:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I’ve had a lot of requests for SMS related applications. So today we will create a
SMS logger application. This application will allow users to scroll through a listing
of all the SMS / text messages they have received while the application has been running.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay16SMS_11D4D/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay16SMS_11D4D/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;SMS Logger&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This is a great application for a beginner to create. It has a very simple UI, the
main component is the WebBrowser. The way we can have nicely formatted text easily. 
&lt;/p&gt;
&lt;p&gt;
The key piece of code here is the MessageRecieved event off of the SmsIntercepter
object.
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 52.13%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; StringBuilder
documentText = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; SmsInterceptor_MessageReceived(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
MessageInterceptorEventArgs e)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (enableInterceptor
== &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Cast to SmsMessage to access message body&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Not expecting to receive any non-SMS messages but use &amp;quot;as&amp;quot; to&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
cast to be extra safe&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; SmsMessage
newMessage = e.Message &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; SmsMessage;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (newMessage
!= &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; documentText.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Body:&amp;lt;/b&amp;gt;
{0}&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;, newMessage.Body);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; documentText.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Name:&amp;lt;/b&amp;gt;
{0}&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;, newMessage.From.Name);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; documentText.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Address:&amp;lt;/b&amp;gt;
{0}&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;, newMessage.From.Address);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; documentText.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Last
Modified:&amp;lt;/b&amp;gt; {0}&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;, newMessage.LastModified);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt; documentText.AppendFormat(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;b&amp;gt;Received:&amp;lt;/b&amp;gt;
{0}&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;, newMessage.Received);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; documentText.Append(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 20:&lt;/span&gt; webBrowser.DocumentText
= documentText.ToString();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 21:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 22:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
We have a few actions the user do: &lt;strong&gt;Start&lt;/strong&gt;, &lt;strong&gt;Stop&lt;/strong&gt;, &lt;strong&gt;Clear&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;,
and &lt;strong&gt;Exit&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This application logs incoming SMS messages, but it doesn’t do several thing that
were requested from our reader. It doesn’t log outgoing messages. It doesn’t save
to a text file. And it doesn’t clear out data from Outlook Mobile when the users runs
SMS Logger.
&lt;/p&gt;
&lt;p&gt;
I also think there is room to improve the UI. I think some small 16x16 pixel graphic
files could really add some life to the application. Maybe one icon for incoming messages,
and one for outgoing messages.
&lt;/p&gt;
&lt;p&gt;
So who’s up to it? Anyone want to take this application to the next level? Just let
me know.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/SmsLogger.cab"&gt;smsLogger.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/SmsLogger.zip"&gt;smsLogger.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
So what possibilities do you see for this type of application? for business? for entertainment?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=4274cf6f-23a8-491d-819f-b66aa663d6aa" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,4274cf6f-23a8-491d-819f-b66aa663d6aa.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=4133dec5-e0c7-47df-8f7d-0ab72f0da13d</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,4133dec5-e0c7-47df-8f7d-0ab72f0da13d.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,4133dec5-e0c7-47df-8f7d-0ab72f0da13d.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4133dec5-e0c7-47df-8f7d-0ab72f0da13d</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Today, is day 15 of my 30 Days of .NET challenge. That marks the 50% point, and we
have 15 applications for 15 days. Thanks for your support!
</p>
        <p>
And we have made it through another week. If you missed the week one recap here it
is: <a href="http://www.cjcraft.com/blog/2008/06/06/30DaysOfNETWindowsMobileApplicationsDay05MobileCapture.aspx">30
Days of .NET [Windows Mobile Applications] - Week One</a>.
</p>
        <p>
          <strong>What’s your favorite?</strong>
        </p>
        <p>
 
</p>
        <table cellspacing="0" cellpadding="2" width="414" border="0">
          <tbody>
            <tr>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_2.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="239" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb.png" width="180" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_4.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_1.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_6.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_2.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="112">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_8.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_3.png" width="155" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsDay08RotateMe.aspx">Rotate
Me</a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/2008/06/10/30DaysOfNETWindowsMobileApplicationsDay09MobileTipper.aspx">Mobile
Tipper</a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/2008/06/11/30DaysOfNETWindowsMobileApplicationsDay10WhatIsMyIP.aspx">What
is My IP?</a>
              </td>
              <td valign="top" width="112">
                <a href="http://www.cjcraft.com/blog/2008/06/12/30DaysOfNETWindowsMobileApplicationsDay11MobileSignature.aspx">Mobile
Signature</a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
Lots of variety, everything from network utilities, to graphics, to humor, to SMS
text messaging. Great ideas, guys!
</p>
        <p>
 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <table cellspacing="0" cellpadding="2" width="686" border="0">
          <tbody>
            <tr>
              <td valign="top" width="170">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_10.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_4.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="171">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_12.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_5.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="171">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_14.png">
                  <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_6.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="172">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image30.png">
                  <img title="image_thumb14" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image_thumb14" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb14_ced18542-0fc2-4ed3-bbe4-c32761f47adc.png" width="156" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="170">
                <a href="http://www.cjcraft.com/blog/2008/06/13/30DaysOfNETWindowsMobileApplicationsDay12MobileQuiz.aspx">Mobile
Quiz</a>
              </td>
              <td valign="top" width="171">
                <a href="http://www.cjcraft.com/blog/2008/06/14/30DaysOfNETWindowsMobileApplicationsDay13FridayThe13thNdashPocketDeathCalculator.aspx">Pocket
Death Calculator</a>
              </td>
              <td valign="top" width="171">
                <a href="http://www.cjcraft.com/blog/2008/06/15/30DaysOfNETWindowsMobileApplicationsDay14MobileSMSContact.aspx">Mobile
SMS Contact</a>
              </td>
              <td valign="top" width="172">
                <a href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsDay15MobileSMSRemote.aspx">What
will be next?</a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
 
</p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Got an idea? Got some feedback? Share it? Thanks!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Week Two</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,4133dec5-e0c7-47df-8f7d-0ab72f0da13d.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsWeekTwo.aspx</link>
      <pubDate>Mon, 16 Jun 2008 07:48:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Today, is day 15 of my 30 Days of .NET challenge. That marks the 50% point, and we
have 15 applications for 15 days. Thanks for your support!
&lt;/p&gt;
&lt;p&gt;
And we have made it through another week. If you missed the week one recap here it
is: &lt;a href="http://www.cjcraft.com/blog/2008/06/06/30DaysOfNETWindowsMobileApplicationsDay05MobileCapture.aspx"&gt;30
Days of .NET [Windows Mobile Applications] - Week One&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What’s your favorite?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="414" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="239" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb.png" width="180" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_1.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_6.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_2.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="112"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_8.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_3.png" width="155" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsDay08RotateMe.aspx"&gt;Rotate
Me&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/10/30DaysOfNETWindowsMobileApplicationsDay09MobileTipper.aspx"&gt;Mobile
Tipper&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/11/30DaysOfNETWindowsMobileApplicationsDay10WhatIsMyIP.aspx"&gt;What
is My IP?&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="112"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/12/30DaysOfNETWindowsMobileApplicationsDay11MobileSignature.aspx"&gt;Mobile
Signature&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Lots of variety, everything from network utilities, to graphics, to humor, to SMS
text messaging. Great ideas, guys!
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="686" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="170"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_10.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_4.png" width="155" align="left" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="171"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_12.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_5.png" width="155" align="left" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="171"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_14.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb_6.png" width="155" align="left" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="172"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image30.png"&gt;&lt;img title="image_thumb14" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image_thumb14" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekTwo_14B00/image_thumb14_ced18542-0fc2-4ed3-bbe4-c32761f47adc.png" width="156" align="left" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="170"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/13/30DaysOfNETWindowsMobileApplicationsDay12MobileQuiz.aspx"&gt;Mobile
Quiz&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="171"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/14/30DaysOfNETWindowsMobileApplicationsDay13FridayThe13thNdashPocketDeathCalculator.aspx"&gt;Pocket
Death Calculator&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="171"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/15/30DaysOfNETWindowsMobileApplicationsDay14MobileSMSContact.aspx"&gt;Mobile
SMS Contact&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="172"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsDay15MobileSMSRemote.aspx"&gt;What
will be next?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Got an idea? Got some feedback? Share it? Thanks!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=4133dec5-e0c7-47df-8f7d-0ab72f0da13d" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,4133dec5-e0c7-47df-8f7d-0ab72f0da13d.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=1ebc3419-f6fc-4608-8340-8f09e466ddf7</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,1ebc3419-f6fc-4608-8340-8f09e466ddf7.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,1ebc3419-f6fc-4608-8340-8f09e466ddf7.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1ebc3419-f6fc-4608-8340-8f09e466ddf7</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Today’s application is about possibilities. It’s a new area we will explore in our
future applications. It’s important to learn how to development applications, but
it is also important to learn what kind of applications you can develop. Your goal
is always to reach just a little further, and grow from the experience.
</p>
        <p>
 
</p>
        <p>
          <strong>The important thing here isn’t what this application does with these ideas,
but what you could do with these ideas.</strong>
        </p>
        <p>
 
</p>
        <p>
People can use SMS to send and receive information through text messages, but with
the power of Windows Mobile it is easy for application to send and receive commands
and data. There is a big movement for software to expose its features and functions
to other programs. But image a world, that probably isn’t too far, where your mobile
device has it’s own API that you and others can use to access its data and functions.
</p>
        <p>
Where could this be useful? Well many companies need the ability to send “Alerts”
of some kind to their workers. It is easy to use the Windows Mobile SMS API to have
a custom written application that check for specially “tagged” SMS messages.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay15Mob_1416A/image_2.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay15Mob_1416A/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Mobile SMS Remote</strong>
        </p>
        <p>
SMS Remote is an application that could run on two or more Windows Mobile device and
allow each of the phones run to support “commands” on the phones. For example, a user
could get the date and time of another device running SMS Remote. Or the user could
run a command to get the other phone’s current GPS location information. The possibilities
are limitless. Both devices are both servers and both clients in other words a very
simple peer-to-peer network using SMS technology. How cool is that?
</p>
        <p>
What if sometimes we don’t want others to be able to run commands on our device remotely?
First of all we could always exit the application. The application must be running
in other to execute remote commands. Be I have also added an “Allow Remote Commands”
feature.
</p>
        <p>
How can we send SMS remote commands? Use the SMS command ComboBox and choose a command,
and enter the remote device’s phone number. Then just click “Send”.
</p>
        <p>
How can we tell what commands have been remotely run on our device? There is a received
commands listing at the bottom the screen. It shows the phone number of the device
that send the command, the time the command arrive, and which command was requested.
</p>
        <p>
This is a rough prototype of an idea that has HUGE potential. Some point in the next
ten years this concept will take off and become something along the lines of Mobile
2.0.
</p>
        <p>
The trick to this application is using the very cooly named Windows Mobile 6.0 SDK <strong>MessageInterceptor</strong> class.
We can use it to have any SMS that begins with “30days:” fire an event in our application
that we will then handle. This is very, very, very simple for something so powerful.
Use it!
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 41.37%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 206px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span> MessageInterceptor
_smsInterceptor = <span style="color: #0000ff">null</span>;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> LoadSmsIntercepter()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> _smsInterceptor
= <span style="color: #0000ff">new</span> MessageInterceptor(InterceptionAction.NotifyAndDelete);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> _smsInterceptor.MessageCondition
=</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">new</span> MessageCondition(MessageProperty.Subject,</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> MessagePropertyComparisonType.StartsWith, <span style="color: #006080">"30days:"</span>, <span style="color: #0000ff">true</span>);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> _smsInterceptor.MessageReceived
+= SmsInterceptor_MessageReceived;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> }</pre>
          </div>
        </div>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
The rest is simple. Was the SMS a “command” or a “result”? If command we need to run
and return a result. If result we need to act on or display to device user. 
</p>
        <p>
          <strong>Possibilities:</strong>
        </p>
        <p>
I implemented the get date and time function, but not the GPS function. This would
be a very useful addition to the application that I would love to say a reader did.
Or how about a way to add Internet Explorer Mobile favorites? Or how about something
more Web 2.0 like what song is currently playing.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSMSRemote.CAB">mobileSMSRemote.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSMSRemote.zip">mobileSMSRemote.zip</a></p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
So what possibilities do you see for this type of application? for business? for entertainment?
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=1ebc3419-f6fc-4608-8340-8f09e466ddf7" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 15: Mobile SMS Remote</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,1ebc3419-f6fc-4608-8340-8f09e466ddf7.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/16/30DaysOfNETWindowsMobileApplicationsDay15MobileSMSRemote.aspx</link>
      <pubDate>Mon, 16 Jun 2008 06:58:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Today’s application is about possibilities. It’s a new area we will explore in our
future applications. It’s important to learn how to development applications, but
it is also important to learn what kind of applications you can develop. Your goal
is always to reach just a little further, and grow from the experience.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The important thing here isn’t what this application does with these ideas,
but what you could do with these ideas.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
People can use SMS to send and receive information through text messages, but with
the power of Windows Mobile it is easy for application to send and receive commands
and data. There is a big movement for software to expose its features and functions
to other programs. But image a world, that probably isn’t too far, where your mobile
device has it’s own API that you and others can use to access its data and functions.
&lt;/p&gt;
&lt;p&gt;
Where could this be useful? Well many companies need the ability to send “Alerts”
of some kind to their workers. It is easy to use the Windows Mobile SMS API to have
a custom written application that check for specially “tagged” SMS messages.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay15Mob_1416A/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay15Mob_1416A/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mobile SMS Remote&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
SMS Remote is an application that could run on two or more Windows Mobile device and
allow each of the phones run to support “commands” on the phones. For example, a user
could get the date and time of another device running SMS Remote. Or the user could
run a command to get the other phone’s current GPS location information. The possibilities
are limitless. Both devices are both servers and both clients in other words a very
simple peer-to-peer network using SMS technology. How cool is that?
&lt;/p&gt;
&lt;p&gt;
What if sometimes we don’t want others to be able to run commands on our device remotely?
First of all we could always exit the application. The application must be running
in other to execute remote commands. Be I have also added an “Allow Remote Commands”
feature.
&lt;/p&gt;
&lt;p&gt;
How can we send SMS remote commands? Use the SMS command ComboBox and choose a command,
and enter the remote device’s phone number. Then just click “Send”.
&lt;/p&gt;
&lt;p&gt;
How can we tell what commands have been remotely run on our device? There is a received
commands listing at the bottom the screen. It shows the phone number of the device
that send the command, the time the command arrive, and which command was requested.
&lt;/p&gt;
&lt;p&gt;
This is a rough prototype of an idea that has HUGE potential. Some point in the next
ten years this concept will take off and become something along the lines of Mobile
2.0.
&lt;/p&gt;
&lt;p&gt;
The trick to this application is using the very cooly named Windows Mobile 6.0 SDK &lt;strong&gt;MessageInterceptor&lt;/strong&gt; class.
We can use it to have any SMS that begins with “30days:” fire an event in our application
that we will then handle. This is very, very, very simple for something so powerful.
Use it!
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 41.37%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 206px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; MessageInterceptor
_smsInterceptor = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; LoadSmsIntercepter()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; _smsInterceptor
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MessageInterceptor(InterceptionAction.NotifyAndDelete);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; _smsInterceptor.MessageCondition
=&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MessageCondition(MessageProperty.Subject,&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; MessagePropertyComparisonType.StartsWith, &lt;span style="color: #006080"&gt;&amp;quot;30days:&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; _smsInterceptor.MessageReceived
+= SmsInterceptor_MessageReceived;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The rest is simple. Was the SMS a “command” or a “result”? If command we need to run
and return a result. If result we need to act on or display to device user. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Possibilities:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I implemented the get date and time function, but not the GPS function. This would
be a very useful addition to the application that I would love to say a reader did.
Or how about a way to add Internet Explorer Mobile favorites? Or how about something
more Web 2.0 like what song is currently playing.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSMSRemote.CAB"&gt;mobileSMSRemote.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSMSRemote.zip"&gt;mobileSMSRemote.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
So what possibilities do you see for this type of application? for business? for entertainment?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=1ebc3419-f6fc-4608-8340-8f09e466ddf7" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,1ebc3419-f6fc-4608-8340-8f09e466ddf7.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=a973d1de-ce07-4c16-9110-2e169185309f</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,a973d1de-ce07-4c16-9110-2e169185309f.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,a973d1de-ce07-4c16-9110-2e169185309f.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a973d1de-ce07-4c16-9110-2e169185309f</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Today one of my readers, Paul Diston, made the following request.
</p>
        <blockquote>
          <p>
            <em>Hi, 
<br />
I have another idea you might be interested in. I would like to be able to type in
a single SMS message and then hit the send button which would then send the same message
to all my contacts that have a mobile number specified.</em>
          </p>
          <p>
            <em>
            </em>
            <br />
            <em>Thanks 
<br />
Paul Diston</em>
          </p>
        </blockquote>
        <p>
The thing that I really liked about Paul’s suggestion is that is cover two very important
mobile development topics: one is working with contacts stored in Outlook Mobile,
and the other is working with SMS messaging.
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay14Mob_138DF/image_2.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay14Mob_138DF/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay14Mob_138DF/image_4.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="216" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay14Mob_138DF/image_thumb_1.png" width="180" align="right" border="0" />
          </a>
          <strong>Mobile
SMS Contact</strong>
        </p>
        <p>
I changed it a little bit from Paul’s original request. I decided to incorporate a
filter into the application. This way you can send SMS messages to your personal contacts,
or your business contacts. You could even create a custom category. I didn’t include
an option to select contacts that do not have a category assigned to them. This would
be a great modification for a reader to implement. Simply add a ‘&lt;none&gt;’ item
to the list, and if that item is selected add any contact that doesn’t have a category.
</p>
        <p>
I added a ListView so that users could see the contacts they were about to text message.
Another great enhancement, would be the ability to modify this listing. Just a remove
option would be a great addition in functionality.
</p>
        <p>
One feature I added as a polishing touch, was the live character count feature. This
feature lets users know how much more text they can send. And we have found another
opportunity for improvement here. I limit the text to 160 characters, but if someone
entered in more text we could send X number of text messages until the complete message
was delivered.
</p>
        <p>
Next with have our SMS Message TextBox where we can type the message we will send.
Nothing special here, but I didn’t set a <strong>MaxLength of 160 characters</strong>. 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
At the bottom I exposed the RequestDeliveryReport property of the SmsMessage class.
What ever the user picks here will be assigned to that property.
</p>
        <p>
One feature that I really love about Windows Mobile programming, that especially came
in useful for this application was the <a href="http://msdn.microsoft.com/en-us/library/bb158502.aspx">Cellular
Emulator</a>.
</p>
        <p>
          <strong>GetContacts Code:</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 76.21%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span> List&lt;Contact&gt;
GetContacts(<span style="color: #0000ff">string</span> category)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> List&lt;Contact&gt;
contacts = <span style="color: #0000ff">new</span> List&lt;Contact&gt;();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span> ContactCollection
contactsCollection = outlookSession.Contacts.Items;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">foreach</span> (Contact
contact <span style="color: #0000ff">in</span> contactsCollection)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span>
              <span style="color: #0000ff">if</span> (contact.Categories.Contains(category))</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> contacts.Add(contact);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span>
              <span style="color: #0000ff">return</span> contacts;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> }</pre>
          </div>
        </div>
        <p>
          <strong>SendSMS Code:</strong>
        </p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> SendSMS()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> List&lt;Contact&gt;
contacts = GetContacts(comboBoxCategories.SelectedItem.ToString());</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span> SmsMessage
smsMessage = <span style="color: #0000ff">new</span> SmsMessage();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #008000">//Set
the message body.</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> smsMessage.Body
= textBoxSMSMessage.Text;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span>
              <span style="color: #0000ff">foreach</span> (Contact
contact <span style="color: #0000ff">in</span> contacts)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span>
              <span style="color: #0000ff">string</span> name
= <span style="color: #0000ff">string</span>.Format(<span style="color: #006080">"{0}
{1}"</span>, contact.FirstName, contact.LastName).Trim();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span>
              <span style="color: #0000ff">string</span> address
= contact.MobileTelephoneNumber;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span>
              <span style="color: #0000ff">if</span> (address.Length
== 0) <span style="color: #0000ff">break</span>;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span>
              <span style="color: #008000">//Add
recipients.</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span> smsMessage.Body
= textBoxSMSMessage.Text;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span>
              <span style="color: #0000ff">if</span> (name.Length
== 0)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span> smsMessage.To.Add(<span style="color: #0000ff">new</span> Recipient(address));</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 20:</span>
              <span style="color: #0000ff">else</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 21:</span> smsMessage.To.Add(<span style="color: #0000ff">new</span> Recipient(name,
address));</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 22:</span> smsMessage.RequestDeliveryReport
= checkBoxRequestDeliveryReport.Checked;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 23:</span> }</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 24:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 25:</span>
              <span style="color: #0000ff">if</span>(smsMessage.To.Count
== 0) <span style="color: #0000ff">return</span>;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 26:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 27:</span>
              <span style="color: #008000">//Send
the SMS message.</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 28:</span> smsMessage.Send();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 29:</span> }</pre>
          </div>
        </div>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSMSContact.cab">mobileSMSContact.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSMSContact.zip">mobileSMSContact.zip</a></p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
One thing I decided not to do with this application is spend any time on the UI. I
wanted readers to see one application that was plain Jane vanilla. Consider what you
could do to this application to make it appealing to end users. Share your ideas,
and maybe I’ll do them, or even better try taking the code and making the changes
yourself. If you do this for the application or any other I will link to back to you
so everyone can “see” and “learn” for your efforts.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=a973d1de-ce07-4c16-9110-2e169185309f" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 14: Mobile SMS Contact</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,a973d1de-ce07-4c16-9110-2e169185309f.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/15/30DaysOfNETWindowsMobileApplicationsDay14MobileSMSContact.aspx</link>
      <pubDate>Sun, 15 Jun 2008 07:10:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Today one of my readers, Paul Diston, made the following request.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;Hi, 
&lt;br /&gt;
I have another idea you might be interested in. I would like to be able to type in
a single SMS message and then hit the send button which would then send the same message
to all my contacts that have a mobile number specified.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;/em&gt; 
&lt;br /&gt;
&lt;em&gt;Thanks 
&lt;br /&gt;
Paul Diston&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The thing that I really liked about Paul’s suggestion is that is cover two very important
mobile development topics: one is working with contacts stored in Outlook Mobile,
and the other is working with SMS messaging.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay14Mob_138DF/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay14Mob_138DF/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay14Mob_138DF/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="216" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay14Mob_138DF/image_thumb_1.png" width="180" align="right" border="0" /&gt;&lt;/a&gt; &lt;strong&gt;Mobile
SMS Contact&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I changed it a little bit from Paul’s original request. I decided to incorporate a
filter into the application. This way you can send SMS messages to your personal contacts,
or your business contacts. You could even create a custom category. I didn’t include
an option to select contacts that do not have a category assigned to them. This would
be a great modification for a reader to implement. Simply add a ‘&amp;lt;none&amp;gt;’ item
to the list, and if that item is selected add any contact that doesn’t have a category.
&lt;/p&gt;
&lt;p&gt;
I added a ListView so that users could see the contacts they were about to text message.
Another great enhancement, would be the ability to modify this listing. Just a remove
option would be a great addition in functionality.
&lt;/p&gt;
&lt;p&gt;
One feature I added as a polishing touch, was the live character count feature. This
feature lets users know how much more text they can send. And we have found another
opportunity for improvement here. I limit the text to 160 characters, but if someone
entered in more text we could send X number of text messages until the complete message
was delivered.
&lt;/p&gt;
&lt;p&gt;
Next with have our SMS Message TextBox where we can type the message we will send.
Nothing special here, but I didn’t set a &lt;strong&gt;MaxLength of 160 characters&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
At the bottom I exposed the RequestDeliveryReport property of the SmsMessage class.
What ever the user picks here will be assigned to that property.
&lt;/p&gt;
&lt;p&gt;
One feature that I really love about Windows Mobile programming, that especially came
in useful for this application was the &lt;a href="http://msdn.microsoft.com/en-us/library/bb158502.aspx"&gt;Cellular
Emulator&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;GetContacts Code:&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 76.21%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; List&amp;lt;Contact&amp;gt;
GetContacts(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; category)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; List&amp;lt;Contact&amp;gt;
contacts = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;Contact&amp;gt;();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; ContactCollection
contactsCollection = outlookSession.Contacts.Items;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (Contact
contact &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; contactsCollection)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (contact.Categories.Contains(category))&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; contacts.Add(contact);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; contacts;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;SendSMS Code:&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; SendSMS()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; List&amp;lt;Contact&amp;gt;
contacts = GetContacts(comboBoxCategories.SelectedItem.ToString());&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; SmsMessage
smsMessage = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SmsMessage();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #008000"&gt;//Set
the message body.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; smsMessage.Body
= textBoxSMSMessage.Text;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (Contact
contact &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; contacts)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; name
= &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;&amp;quot;{0}
{1}&amp;quot;&lt;/span&gt;, contact.FirstName, contact.LastName).Trim();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; address
= contact.MobileTelephoneNumber;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (address.Length
== 0) &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; &lt;span style="color: #008000"&gt;//Add
recipients.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt; smsMessage.Body
= textBoxSMSMessage.Text;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (name.Length
== 0)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt; smsMessage.To.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Recipient(address));&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 20:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 21:&lt;/span&gt; smsMessage.To.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Recipient(name,
address));&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 22:&lt;/span&gt; smsMessage.RequestDeliveryReport
= checkBoxRequestDeliveryReport.Checked;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 23:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 24:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 25:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(smsMessage.To.Count
== 0) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 26:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 27:&lt;/span&gt; &lt;span style="color: #008000"&gt;//Send
the SMS message.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 28:&lt;/span&gt; smsMessage.Send();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 29:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSMSContact.cab"&gt;mobileSMSContact.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSMSContact.zip"&gt;mobileSMSContact.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
One thing I decided not to do with this application is spend any time on the UI. I
wanted readers to see one application that was plain Jane vanilla. Consider what you
could do to this application to make it appealing to end users. Share your ideas,
and maybe I’ll do them, or even better try taking the code and making the changes
yourself. If you do this for the application or any other I will link to back to you
so everyone can “see” and “learn” for your efforts.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=a973d1de-ce07-4c16-9110-2e169185309f" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,a973d1de-ce07-4c16-9110-2e169185309f.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=944f0229-0862-48e1-a2bd-d0aafae082c6</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,944f0229-0862-48e1-a2bd-d0aafae082c6.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,944f0229-0862-48e1-a2bd-d0aafae082c6.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=944f0229-0862-48e1-a2bd-d0aafae082c6</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
        </p>
        <p>
Let’s have some fun today. And do an application that is just for kicks. I had a really
hard time coming up with a <a href="http://en.wikipedia.org/wiki/Friday_the_13th">Friday
the 13th</a> themed mobile application. I finally thought of one: The Pocket Death
Calculator. Yeah, it’s a bit crazy, but it’s good not to take yourself too seriously.
There are lots of these Death Clocks on the Internet, here’s a famous one: <a href="www.deathclock.com/">The
Death Clock</a>.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay13Fri_12B7E/image_4.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay13Fri_12B7E/image_thumb_1.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay13Fri_12B7E/image_2.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay13Fri_12B7E/image_thumb.png" width="154" align="right" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Pocket Death Clock</strong>
        </p>
        <p>
This application is about how many lines of code you can write. It shows how a simple
idea in a good looking package can really charm a lot of people. Most people enjoy
a surprise, or something unexpected, something to break the day from being ordinary
and routine. Sure you can write the next great mobile financial planner package, or
you could write a quick “<strong>fun</strong>” app to put a smile on someone you know’s
face.
</p>
        <p>
The UI is really simple just a background image file, but it is a good looking background
image file. And that is pretty much what is pulling off the application. I thought
about putting glowing red eyes on a timer and having their visibility randomly change,
but decided to leave it as an exercise for my readers. Try it you’ll be surprised
how much it really sets off the application. And makes it stand out.
</p>
        <p>
The death calculation engine is straight forward: we take the user’s age and gender
and modify the average human life span appropriately. Then we subtract the users present
age from their expected life span. Next we calculate the number of seconds in a year.
We use our cryptographically strong random function to pick a random second in that
year for the user to “die” on. Now we have our <strong>death date</strong>. It’s a
simple matter to calculate the number of seconds the user has left. We put everything
on the screen and update on a timer.
</p>
        <p>
There you have it.
</p>
        <p>
          <strong>Possibilties:</strong>
        </p>
        <p>
Simple applications always have the best possibilities. We talked about adding glowing
eyes. But you could also add <strong>random death quotes</strong>. You could also
ask the user more <a href="http://www.demko.com/deathcalculator.htm">questions</a> and
better guesstimate their death date. You could also “<strong>guesstimate</strong>”
where and how they would die using data easily found on the Internet. 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Always good to know you have less than a million seconds before you are going to die
from a shark attack in Quebec. Plenty of time to pick up some <a href="http://en.wikipedia.org/wiki/Shark_repellent">shark
repellent</a>.
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PocketDeathClock.cab">pocketDeathClock.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PocketDeathClock.zip">pocketDeathClock.zip</a></p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
I think this is our first humorous application, not counting <a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f08%2f30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx">Mobile
FX</a>, what did you think of it? Would you like to see more of these types of applications,
that are creative idea based, or more of the technically focused applications? I like
to keep a good bit of variety to show all the possibilities, so I hope that is working
for everyone.
</p>
        <p>
If not, share your idea for tomorrows application.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=944f0229-0862-48e1-a2bd-d0aafae082c6" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 13: Friday the 13th &amp;ndash; Pocket Death Calculator</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,944f0229-0862-48e1-a2bd-d0aafae082c6.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/14/30DaysOfNETWindowsMobileApplicationsDay13FridayThe13thNdashPocketDeathCalculator.aspx</link>
      <pubDate>Sat, 14 Jun 2008 05:14:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Let’s have some fun today. And do an application that is just for kicks. I had a really
hard time coming up with a &lt;a href="http://en.wikipedia.org/wiki/Friday_the_13th"&gt;Friday
the 13th&lt;/a&gt; themed mobile application. I finally thought of one: The Pocket Death
Calculator. Yeah, it’s a bit crazy, but it’s good not to take yourself too seriously.
There are lots of these Death Clocks on the Internet, here’s a famous one: &lt;a href="www.deathclock.com/"&gt;The
Death Clock&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay13Fri_12B7E/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay13Fri_12B7E/image_thumb_1.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay13Fri_12B7E/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay13Fri_12B7E/image_thumb.png" width="154" align="right" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Pocket Death Clock&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This application is about how many lines of code you can write. It shows how a simple
idea in a good looking package can really charm a lot of people. Most people enjoy
a surprise, or something unexpected, something to break the day from being ordinary
and routine. Sure you can write the next great mobile financial planner package, or
you could write a quick “&lt;strong&gt;fun&lt;/strong&gt;” app to put a smile on someone you know’s
face.
&lt;/p&gt;
&lt;p&gt;
The UI is really simple just a background image file, but it is a good looking background
image file. And that is pretty much what is pulling off the application. I thought
about putting glowing red eyes on a timer and having their visibility randomly change,
but decided to leave it as an exercise for my readers. Try it you’ll be surprised
how much it really sets off the application. And makes it stand out.
&lt;/p&gt;
&lt;p&gt;
The death calculation engine is straight forward: we take the user’s age and gender
and modify the average human life span appropriately. Then we subtract the users present
age from their expected life span. Next we calculate the number of seconds in a year.
We use our cryptographically strong random function to pick a random second in that
year for the user to “die” on. Now we have our &lt;strong&gt;death date&lt;/strong&gt;. It’s a
simple matter to calculate the number of seconds the user has left. We put everything
on the screen and update on a timer.
&lt;/p&gt;
&lt;p&gt;
There you have it.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Possibilties:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Simple applications always have the best possibilities. We talked about adding glowing
eyes. But you could also add &lt;strong&gt;random death quotes&lt;/strong&gt;. You could also
ask the user more &lt;a href="http://www.demko.com/deathcalculator.htm"&gt;questions&lt;/a&gt; and
better guesstimate their death date. You could also “&lt;strong&gt;guesstimate&lt;/strong&gt;”
where and how they would die using data easily found on the Internet. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Always good to know you have less than a million seconds before you are going to die
from a shark attack in Quebec. Plenty of time to pick up some &lt;a href="http://en.wikipedia.org/wiki/Shark_repellent"&gt;shark
repellent&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PocketDeathClock.cab"&gt;pocketDeathClock.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PocketDeathClock.zip"&gt;pocketDeathClock.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I think this is our first humorous application, not counting &lt;a href="http://www.cjcraft.com/blog/ct.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e&amp;amp;url=http%3a%2f%2fwww.cjcraft.com%2fblog%2f2008%2f06%2f08%2f30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx"&gt;Mobile
FX&lt;/a&gt;, what did you think of it? Would you like to see more of these types of applications,
that are creative idea based, or more of the technically focused applications? I like
to keep a good bit of variety to show all the possibilities, so I hope that is working
for everyone.
&lt;/p&gt;
&lt;p&gt;
If not, share your idea for tomorrows application.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=944f0229-0862-48e1-a2bd-d0aafae082c6" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,944f0229-0862-48e1-a2bd-d0aafae082c6.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>humor</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=299e8b01-f90d-4f2b-8c8b-18d77db354a3</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,299e8b01-f90d-4f2b-8c8b-18d77db354a3.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,299e8b01-f90d-4f2b-8c8b-18d77db354a3.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=299e8b01-f90d-4f2b-8c8b-18d77db354a3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today we are going to look at another classic goal in Mobile development, data collection.
You might need it for a line of business application, for example a field service
application where workers need to inspection equipment and fill out a questionnaire.
Or you might need it in a mobile poll taker application. You could even use it in
a trivia game. There are few applications actually that couldn’t take advantage of
a question and answer system like the Mobile Quiz.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay12Mob_14BB4/image_4.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay12Mob_14BB4/image_thumb_1.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>
            <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay12Mob_14BB4/image_2.png">
              <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay12Mob_14BB4/image_thumb.png" width="155" align="right" border="0" />
            </a>Mobile
Quiz</strong>
        </p>
        <p>
There is so much potential with this application. I hope you can see the concept and
see the potential here. There are a world of possibilities here. Hopefully this application
will help you get ever so slightly closer to realizing some of them.
</p>
        <p>
The UI is a straight-forward and clean design, which was easy to make but should appeal
to users. Everything is meant to be intuitive and self explanatory. Users should simple
be able to look at the screen and get it.
</p>
        <p>
The first screen is an quiz introduction form. All we have here is some eye candy,
the name of the quiz, and some basic menu options: <strong>Start</strong>, <strong>About</strong>,
and <strong>Exit</strong>.
</p>
        <p>
After this the user is presented with the questions screen. This is the main meat
of the application.
</p>
        <p>
Questions are pulled from an XML file which could be retrieved from a remote server.
</p>
        <p>
 
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span> &lt;?xml
version=<span style="color: #006080">"1.0"</span> encoding=<span style="color: #006080">"utf-8"</span> ?&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> &lt;quiz
name =<span style="color: #006080">"Family Guy Quiz"</span>&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> &lt;question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> &lt;text&gt;In
what state <span style="color: #0000ff">do</span> the Griffins live?&lt;/text&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span> &lt;correct&gt;2&lt;/correct&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> &lt;answer&gt;Connecticuit&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> &lt;answer&gt;Rhode
Island&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> &lt;answer&gt;Massachusetts&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> &lt;answer&gt;Deleware&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> &lt;answer&gt;South
Carolina&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> &lt;/question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> &lt;question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> &lt;text&gt;What
television actor <span style="color: #0000ff">is</span> the mayor of the town?&lt;/text&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> &lt;correct&gt;1&lt;/correct&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span> &lt;answer&gt;Adam
West&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> &lt;answer&gt;David
Hasselhoff&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span> &lt;answer&gt;Leonard
Nimoy&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span> &lt;answer&gt;William
Shatner&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 19:</span> &lt;answer&gt;Harrison
Ford&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 20:</span> &lt;/question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 21:</span> &lt;question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 22:</span> &lt;text&gt;What <span style="color: #0000ff">is</span> Cleveland<span style="color: #006080">'s
last name?&lt;/text&gt;
</span></pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 23:</span> &lt;correct&gt;1&lt;/correct&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 24:</span> &lt;answer&gt;Brown&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 25:</span> &lt;answer&gt;Smith&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 26:</span> &lt;answer&gt;Craft&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 27:</span> &lt;answer&gt;Cub&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 28:</span> &lt;answer&gt;Jones&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 29:</span> &lt;/question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 30:</span> &lt;question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 31:</span> &lt;text&gt;What
is the name of Stewie's stuffed bear?&lt;/text&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 32:</span> &lt;correct&gt;3&lt;/correct&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 33:</span> &lt;answer&gt;Barry&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 34:</span> &lt;answer&gt;Chris&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 35:</span> &lt;answer&gt;Rubert&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 36:</span> &lt;answer&gt;Edward&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 37:</span> &lt;answer&gt;Paddy&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 38:</span> &lt;/question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 39:</span> &lt;question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 40:</span> &lt;text&gt;What <span style="color: #0000ff">is</span> Quagmire's
profession?&lt;/text&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 41:</span> &lt;correct&gt;4&lt;/correct&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 42:</span> &lt;answer&gt;Developer&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 43:</span> &lt;answer&gt;Police
Office&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 44:</span> &lt;answer&gt;Barber&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 45:</span> &lt;answer&gt;Pilot&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 46:</span> &lt;answer&gt;Teacher&lt;/answer&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 47:</span> &lt;/question&gt;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 48:</span> &lt;/quiz&gt;</pre>
          </div>
        </div>
        <p>
 
</p>
        <p>
It’s a snap to open the XML file and read in all of our data.
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span> DataSet
dataSet = <span style="color: #0000ff">new</span> DataSet();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span>
              <span style="color: #008000">//
read quiz data file</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> dataSet.ReadXml(<span style="color: #006080">@"\Program
Files\MobileQuiz\quiz.xml"</span>);</pre>
          </div>
        </div>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
One thing that I decided was important was to avoid showing <strong>modal</strong> MessageBox
dialogs often. <img alt="Sick" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/52_52.gif" /> Instead
I choose to use a label, place it at the top, set it’s background color to Info, and
use it accordingly. This works out great and I think is a <strong>much</strong> better
user experience. Data entry on a mobile device is a huge pain, and if you can take
a dialog out of the equation that’s a good thing.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileQuiz.cab">mobileQuiz.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileQuiz.zip">mobileQuiz.zip</a></p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
There’s a lot here for a little effort, a couple hours, and there is a huge potential
for this type of application. This would be a great project for someone to expand
on and create something really special from. Consider it if you are looking for your
first mobile project.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=299e8b01-f90d-4f2b-8c8b-18d77db354a3" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 12: Mobile Quiz</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,299e8b01-f90d-4f2b-8c8b-18d77db354a3.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/13/30DaysOfNETWindowsMobileApplicationsDay12MobileQuiz.aspx</link>
      <pubDate>Fri, 13 Jun 2008 07:49:00 GMT</pubDate>
      <description>&lt;p&gt;
Today we are going to look at another classic goal in Mobile development, data collection.
You might need it for a line of business application, for example a field service
application where workers need to inspection equipment and fill out a questionnaire.
Or you might need it in a mobile poll taker application. You could even use it in
a trivia game. There are few applications actually that couldn’t take advantage of
a question and answer system like the Mobile Quiz.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay12Mob_14BB4/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay12Mob_14BB4/image_thumb_1.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay12Mob_14BB4/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay12Mob_14BB4/image_thumb.png" width="155" align="right" border="0" /&gt;&lt;/a&gt;Mobile
Quiz&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
There is so much potential with this application. I hope you can see the concept and
see the potential here. There are a world of possibilities here. Hopefully this application
will help you get ever so slightly closer to realizing some of them.
&lt;/p&gt;
&lt;p&gt;
The UI is a straight-forward and clean design, which was easy to make but should appeal
to users. Everything is meant to be intuitive and self explanatory. Users should simple
be able to look at the screen and get it.
&lt;/p&gt;
&lt;p&gt;
The first screen is an quiz introduction form. All we have here is some eye candy,
the name of the quiz, and some basic menu options: &lt;strong&gt;Start&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;,
and &lt;strong&gt;Exit&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
After this the user is presented with the questions screen. This is the main meat
of the application.
&lt;/p&gt;
&lt;p&gt;
Questions are pulled from an XML file which could be retrieved from a remote server.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &amp;lt;?xml
version=&lt;span style="color: #006080"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; encoding=&lt;span style="color: #006080"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; &amp;lt;quiz
name =&lt;span style="color: #006080"&gt;&amp;quot;Family Guy Quiz&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &amp;lt;question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; &amp;lt;text&amp;gt;In
what state &lt;span style="color: #0000ff"&gt;do&lt;/span&gt; the Griffins live?&amp;lt;/text&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &amp;lt;correct&amp;gt;2&amp;lt;/correct&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &amp;lt;answer&amp;gt;Connecticuit&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &amp;lt;answer&amp;gt;Rhode
Island&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; &amp;lt;answer&amp;gt;Massachusetts&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; &amp;lt;answer&amp;gt;Deleware&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; &amp;lt;answer&amp;gt;South
Carolina&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; &amp;lt;/question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; &amp;lt;question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; &amp;lt;text&amp;gt;What
television actor &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; the mayor of the town?&amp;lt;/text&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; &amp;lt;correct&amp;gt;1&amp;lt;/correct&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; &amp;lt;answer&amp;gt;Adam
West&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; &amp;lt;answer&amp;gt;David
Hasselhoff&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt; &amp;lt;answer&amp;gt;Leonard
Nimoy&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; &amp;lt;answer&amp;gt;William
Shatner&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 19:&lt;/span&gt; &amp;lt;answer&amp;gt;Harrison
Ford&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 20:&lt;/span&gt; &amp;lt;/question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 21:&lt;/span&gt; &amp;lt;question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 22:&lt;/span&gt; &amp;lt;text&amp;gt;What &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; Cleveland&lt;span style="color: #006080"&gt;'s
last name?&amp;lt;/text&amp;gt;
&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 23:&lt;/span&gt; &amp;lt;correct&amp;gt;1&amp;lt;/correct&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 24:&lt;/span&gt; &amp;lt;answer&amp;gt;Brown&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 25:&lt;/span&gt; &amp;lt;answer&amp;gt;Smith&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 26:&lt;/span&gt; &amp;lt;answer&amp;gt;Craft&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 27:&lt;/span&gt; &amp;lt;answer&amp;gt;Cub&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 28:&lt;/span&gt; &amp;lt;answer&amp;gt;Jones&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 29:&lt;/span&gt; &amp;lt;/question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 30:&lt;/span&gt; &amp;lt;question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 31:&lt;/span&gt; &amp;lt;text&amp;gt;What
is the name of Stewie'&gt;s stuffed bear?&amp;lt;/text&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 32:&lt;/span&gt; &amp;lt;correct&amp;gt;3&amp;lt;/correct&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 33:&lt;/span&gt; &amp;lt;answer&amp;gt;Barry&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 34:&lt;/span&gt; &amp;lt;answer&amp;gt;Chris&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 35:&lt;/span&gt; &amp;lt;answer&amp;gt;Rubert&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 36:&lt;/span&gt; &amp;lt;answer&amp;gt;Edward&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 37:&lt;/span&gt; &amp;lt;answer&amp;gt;Paddy&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 38:&lt;/span&gt; &amp;lt;/question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 39:&lt;/span&gt; &amp;lt;question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 40:&lt;/span&gt; &amp;lt;text&amp;gt;What &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; Quagmire's
profession?&amp;lt;/text&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 41:&lt;/span&gt; &amp;lt;correct&amp;gt;4&amp;lt;/correct&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 42:&lt;/span&gt; &amp;lt;answer&amp;gt;Developer&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 43:&lt;/span&gt; &amp;lt;answer&amp;gt;Police
Office&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 44:&lt;/span&gt; &amp;lt;answer&amp;gt;Barber&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 45:&lt;/span&gt; &amp;lt;answer&amp;gt;Pilot&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 46:&lt;/span&gt; &amp;lt;answer&amp;gt;Teacher&amp;lt;/answer&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 47:&lt;/span&gt; &amp;lt;/question&amp;gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 48:&lt;/span&gt; &amp;lt;/quiz&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
It’s a snap to open the XML file and read in all of our data.
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; DataSet
dataSet = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DataSet();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
read quiz data file&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; dataSet.ReadXml(&lt;span style="color: #006080"&gt;@&amp;quot;\Program
Files\MobileQuiz\quiz.xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
One thing that I decided was important was to avoid showing &lt;strong&gt;modal&lt;/strong&gt; MessageBox
dialogs often. &lt;img alt="Sick" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/52_52.gif" /&gt; Instead
I choose to use a label, place it at the top, set it’s background color to Info, and
use it accordingly. This works out great and I think is a &lt;strong&gt;much&lt;/strong&gt; better
user experience. Data entry on a mobile device is a huge pain, and if you can take
a dialog out of the equation that’s a good thing.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileQuiz.cab"&gt;mobileQuiz.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileQuiz.zip"&gt;mobileQuiz.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
There’s a lot here for a little effort, a couple hours, and there is a huge potential
for this type of application. This would be a great project for someone to expand
on and create something really special from. Consider it if you are looking for your
first mobile project.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=299e8b01-f90d-4f2b-8c8b-18d77db354a3" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,299e8b01-f90d-4f2b-8c8b-18d77db354a3.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=b81ce645-5675-488f-b9f2-925b3a11f6d1</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,b81ce645-5675-488f-b9f2-925b3a11f6d1.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,b81ce645-5675-488f-b9f2-925b3a11f6d1.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b81ce645-5675-488f-b9f2-925b3a11f6d1</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay11Mob_1498A/image_4.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="260" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay11Mob_1498A/image_thumb_1.png" width="196" align="right" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
You know sometime someone tells you about something, and you can tell there is a whole
lot more to it than they are telling you about. Well, signature capture for Windows
Mobile is one of those things. It’s really not bad today and you can do it in one
sitting easily now. But there was a time, when if your life depending on it you might
be able to get it right. At least we have managed code now. A <a href="http://pagebrooks.com/">few</a><a href="http://stupidprogrammer.com/">of</a><a href="http://swampfoxsoft.com/blog/">us</a> attempted
to do this feat in embedded Visual Basic years ago and I’m surprised it didn’t cost
us our sanity. <a href="http://en.wikipedia.org/wiki/Hindenburg_disaster">Oh the humanity…</a></p>
        <p>
You could do it you just had to copy each color pixel by pixel and save it into a
bitmap, and that was a challenge too. And <strong>GetPixel()</strong> had to be the
slowest function call <strong>ever</strong>. It took at least a second. No way, you
were going to give someone a full screen to put there signature.
</p>
        <p>
That was then, this is now…
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay11Mob_1498A/image_6.png">
            <img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay11Mob_1498A/image_thumb_2.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Mobile Signature</strong>
        </p>
        <p>
Office 2007 might have 2007 features in it. And it works for Office 2007, well to
a point. But with Windows Mobile applications less is more. Don’t get me wrong I really
do think Mobile Signature would make a great feature in a more complete application.
But as far as the feature of taking a signature on a mobile device this is a great
approach. 
</p>
        <p>
Also note that Mobile Signature could be easily adapted into a drawing application,
and so on, especially for kids.
</p>
        <p>
Let’s talk about UI first. Notice how much space is dedicated to taking the user’s
signature. This is important; I’ve seen almost the reverse before and that just isn’t
very usable. I took a little extra time and care to make sure all control had a black
border around them,expect the black color square. It has a gray border.
</p>
        <p>
One thing to note is a wanted the user to be able to tell what color they would be
writing in without having to draw on the screen. This is accomplished by having the
borders around the active color flash on and off. This is a great visual effect that
was easy to implement with a timer. We track the currently active color in a form
level variable, and on the timer tick event, which happens every 500 ms, we toggle
the visibility of the border around the active color. Works great! Check it out!
</p>
        <p>
The menu is another area that is simple but you can learn from it. Save is very important
to us, so it is prominent and has it own hardware button that can cause it to occur.
On the menu we have an option for clearing the screen, showing the about form, and
exiting the application. But we also have a menu option to change the size of the
line we are drawing with. It can be set from any of the following: 1 pixel, 3 pixels,
5 pixels.
</p>
        <p>
The core of the application is the code that actually draws the lines on the screen.
Here it is:
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> pictureBox_MouseMove(<span style="color: #0000ff">object</span> sender,
MouseEventArgs e)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">if</span> (pen.Color
!= signatureColor)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> pen
= <span style="color: #0000ff">new</span> Pen(signatureColor);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #0000ff">if</span> (pen.Width
!= width)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> pen.Width
= width;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> x1
= x2;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> y1
= y2;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> x2
= e.X;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span> y2
= e.Y;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span>
              <span style="color: #0000ff">if</span> (x1
== -1 &amp;&amp; y1 == -1)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span>
              <span style="color: #0000ff">return</span>;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span> pictureBoxSignature.CreateGraphics().DrawLine(pen,
x1, y1, x2, y2);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span> }</pre>
          </div>
        </div>
        <p>
 
</p>
        <p>
One area of code that is worth checking out is the code to save the bitmap of the
signature. It’s pretty advanced and powerful.
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #008000">//
P/Invoke declaration</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> [DllImport(<span style="color: #006080">"coredll.dll"</span>)]</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">static</span>
              <span style="color: #0000ff">extern</span>
              <span style="color: #0000ff">int</span> BitBlt(IntPtr
hdcDest, <span style="color: #0000ff">int</span> nXDest, <span style="color: #0000ff">int</span> nYDest, <span style="color: #0000ff">int</span> nWidth, <span style="color: #0000ff">int</span> nHeight,
IntPtr hdcSrc, <span style="color: #0000ff">int</span> nXSrc, <span style="color: #0000ff">int</span> nYSrc, <span style="color: #0000ff">uint</span> dwRop);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">const</span>
              <span style="color: #0000ff">int</span> SRCCOPY
= 0x00CC0020;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> Save(<span style="color: #0000ff">string</span> filename,
Graphics gx, Rectangle rect)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> Bitmap
bmp = <span style="color: #0000ff">new</span> Bitmap(rect.Width, rect.Height);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span>
              <span style="color: #008000">//
Create compatible graphics</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> Graphics
gxComp = Graphics.FromImage(bmp);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span>
              <span style="color: #008000">//
Blit the image data</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span> BitBlt(gxComp.GetHdc(),
0, 0, rect.Width, rect.Height, gx.GetHdc(), rect.Left, rect.Top, SRCCOPY);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> bmp.Save(filename,
System.Drawing.Imaging.ImageFormat.Bmp);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span>
              <span style="color: #008000">//
Cleanup</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 16:</span> bmp.Dispose();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 17:</span> gxComp.Dispose();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 18:</span> }</pre>
          </div>
        </div>
        <p>
Everything else is pretty straight forward, but check it out and see what you think!
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSignature.cab">mobileSignature.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSignature.zip">mobileSignature.zip</a></p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
So, how do you guys feel about line of business applications? Do you want more days
that focus on line of business application topics? or less? Let me know! :D Tomorrow
will be here before you know it.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=b81ce645-5675-488f-b9f2-925b3a11f6d1" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 11: Mobile Signature</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,b81ce645-5675-488f-b9f2-925b3a11f6d1.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/12/30DaysOfNETWindowsMobileApplicationsDay11MobileSignature.aspx</link>
      <pubDate>Thu, 12 Jun 2008 07:48:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay11Mob_1498A/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="260" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay11Mob_1498A/image_thumb_1.png" width="196" align="right" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
You know sometime someone tells you about something, and you can tell there is a whole
lot more to it than they are telling you about. Well, signature capture for Windows
Mobile is one of those things. It’s really not bad today and you can do it in one
sitting easily now. But there was a time, when if your life depending on it you might
be able to get it right. At least we have managed code now. A &lt;a href="http://pagebrooks.com/"&gt;few&lt;/a&gt; &lt;a href="http://stupidprogrammer.com/"&gt;of&lt;/a&gt; &lt;a href="http://swampfoxsoft.com/blog/"&gt;us&lt;/a&gt; attempted
to do this feat in embedded Visual Basic years ago and I’m surprised it didn’t cost
us our sanity. &lt;a href="http://en.wikipedia.org/wiki/Hindenburg_disaster"&gt;Oh the humanity…&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
You could do it you just had to copy each color pixel by pixel and save it into a
bitmap, and that was a challenge too. And &lt;strong&gt;GetPixel()&lt;/strong&gt; had to be the
slowest function call &lt;strong&gt;ever&lt;/strong&gt;. It took at least a second. No way, you
were going to give someone a full screen to put there signature.
&lt;/p&gt;
&lt;p&gt;
That was then, this is now…
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay11Mob_1498A/image_6.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay11Mob_1498A/image_thumb_2.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mobile Signature&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Office 2007 might have 2007 features in it. And it works for Office 2007, well to
a point. But with Windows Mobile applications less is more. Don’t get me wrong I really
do think Mobile Signature would make a great feature in a more complete application.
But as far as the feature of taking a signature on a mobile device this is a great
approach. 
&lt;/p&gt;
&lt;p&gt;
Also note that Mobile Signature could be easily adapted into a drawing application,
and so on, especially for kids.
&lt;/p&gt;
&lt;p&gt;
Let’s talk about UI first. Notice how much space is dedicated to taking the user’s
signature. This is important; I’ve seen almost the reverse before and that just isn’t
very usable. I took a little extra time and care to make sure all control had a black
border around them,expect the black color square. It has a gray border.
&lt;/p&gt;
&lt;p&gt;
One thing to note is a wanted the user to be able to tell what color they would be
writing in without having to draw on the screen. This is accomplished by having the
borders around the active color flash on and off. This is a great visual effect that
was easy to implement with a timer. We track the currently active color in a form
level variable, and on the timer tick event, which happens every 500 ms, we toggle
the visibility of the border around the active color. Works great! Check it out!
&lt;/p&gt;
&lt;p&gt;
The menu is another area that is simple but you can learn from it. Save is very important
to us, so it is prominent and has it own hardware button that can cause it to occur.
On the menu we have an option for clearing the screen, showing the about form, and
exiting the application. But we also have a menu option to change the size of the
line we are drawing with. It can be set from any of the following: 1 pixel, 3 pixels,
5 pixels.
&lt;/p&gt;
&lt;p&gt;
The core of the application is the code that actually draws the lines on the screen.
Here it is:
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; pictureBox_MouseMove(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
MouseEventArgs e)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (pen.Color
!= signatureColor)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; pen
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Pen(signatureColor);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (pen.Width
!= width)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; pen.Width
= width;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; x1
= x2;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; y1
= y2;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; x2
= e.X;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; y2
= e.Y;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (x1
== -1 &amp;amp;&amp;amp; y1 == -1)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt; pictureBoxSignature.CreateGraphics().DrawLine(pen,
x1, y1, x2, y2);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
One area of code that is worth checking out is the code to save the bitmap of the
signature. It’s pretty advanced and powerful.
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
P/Invoke declaration&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; [DllImport(&lt;span style="color: #006080"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; BitBlt(IntPtr
hdcDest, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; nXDest, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; nYDest, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; nWidth, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; nHeight,
IntPtr hdcSrc, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; nXSrc, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; nYSrc, &lt;span style="color: #0000ff"&gt;uint&lt;/span&gt; dwRop);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; SRCCOPY
= 0x00CC0020;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Save(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; filename,
Graphics gx, Rectangle rect)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; Bitmap
bmp = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Bitmap(rect.Width, rect.Height);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Create compatible graphics&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; Graphics
gxComp = Graphics.FromImage(bmp);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Blit the image data&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; BitBlt(gxComp.GetHdc(),
0, 0, rect.Width, rect.Height, gx.GetHdc(), rect.Left, rect.Top, SRCCOPY);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; bmp.Save(filename,
System.Drawing.Imaging.ImageFormat.Bmp);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Cleanup&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 16:&lt;/span&gt; bmp.Dispose();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 17:&lt;/span&gt; gxComp.Dispose();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 18:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Everything else is pretty straight forward, but check it out and see what you think!
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSignature.cab"&gt;mobileSignature.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileSignature.zip"&gt;mobileSignature.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
So, how do you guys feel about line of business applications? Do you want more days
that focus on line of business application topics? or less? Let me know! :D Tomorrow
will be here before you know it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=b81ce645-5675-488f-b9f2-925b3a11f6d1" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,b81ce645-5675-488f-b9f2-925b3a11f6d1.aspx</comments>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>miscellaneous</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=0ee05f9e-aa92-4490-b93e-975e6db79f7f</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,0ee05f9e-aa92-4490-b93e-975e6db79f7f.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,0ee05f9e-aa92-4490-b93e-975e6db79f7f.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0ee05f9e-aa92-4490-b93e-975e6db79f7f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
I mentioned to the group that I would post the Prize Picker application we wrote together
on my blog as part of my 30 Days of .NET series. I think this was an awesome idea,
and it looked like everyone really enjoyed themselves. Hopefully, a few of them will
see this post and share their thoughts as well. It was very nice to have a hands on
type presentation that everyone got to participate in together. And since only one
person was “driving” we didn’t have to stop and fix a disconnected monitor. Ok, we
did one time, but just one time. <img alt="Open-mouthed" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/teeth_smile.gif" /> 
</p>
        <p>
Big thanks to everyone that came out and participated! Page Brooks, Donny Craft, Benton
Little, , Jamey McElveen , Shawn Morris, and Thad Smith. It was a lot of fun!
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay10Pri_14904/PrizePicker_2.png">
            <img title="PrizePicker" style="margin: 5px" height="455" alt="PrizePicker" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay10Pri_14904/PrizePicker_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>Prize Picker</strong>
        </p>
        <p>
There is probably someone out there who doesn’t think this is the best looking application
ever. Well, you’re right! It’s not, but we didn’t really focus on that any until we
had a fully functional application. At that point it was time to pick prizes for the
lucky hopefuls that became winners at the event.
</p>
        <p>
The only big item we didn’t implement, was an item that came up right at the end,
we wanted to show the last winner in the area down at the bottom of the screen in
big blog letters. And we wanted to rotate through remaining hopefuls and then finally
pick a winner moving them to the winners table.
</p>
        <p>
The application is a firm believer of the <a href="http://en.wikipedia.org/wiki/KISS_principle" target="_blank">KISS
principle</a>. We did the entire application in about an hour and a half. And that
is including some refactorings, and changes we made along the way. I’m pretty happy
with the application, and will love it once we have the “Jackpot” style UI element
added.
</p>
        <p>
We added validation as we needed it, and decided to keep the applications logic in
the UI, as hard as it was for us to do, to in this case to follow our KISS guidelines.
</p>
        <p>
We have used RNGCryptoServiceProvider class already in the <a href="http://www.cjcraft.com/blog/2008/06/07/30DaysOfNETWindowsMobileApplicationsDay06PocketPasswordGen.aspx" target="_blank">Pocket
PasswordGen</a> application on day six. This class makes sure that our random numbers
are statistically random and not pretend watered down random.
</p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 55.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span> Byte[]
randomBytes = <span style="color: #0000ff">new</span><span style="color: #0000ff">byte</span>[4];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> RNGCryptoServiceProvider
rng = <span style="color: #0000ff">new</span> RNGCryptoServiceProvider();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> rng.GetBytes(randomBytes);</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>
              <span style="color: #008000">//
Convert 4 bytes into a 32-bit integer value.</span>
            </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span>
              <span style="color: #0000ff">int</span> seed
= (randomBytes[0] &amp; 0x7f) &lt;&lt; 24 |</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> randomBytes[1]
&lt;&lt; 16 |</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> randomBytes[2]
&lt;&lt; 8 |</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span> randomBytes[3];</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span>
              <span style="color: #0000ff">int</span> pick
= seed % listViewHopefuls.Items.Count;</pre>
          </div>
        </div>
        <p>
 
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PrizePicker.CAB" target="_blank">prizePicker.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PrizePicker.zip" target="_blank">prizePicker.zip</a></p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
The cool thing is we used this application to actually pick the winners for the prizes,
and everything went great. So our intention is to keep using it from now. We are also
going to post it on <a href="http://codeplex.com/" target="_blank">CodePlex</a> soon
and allow others to work on it as well.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=0ee05f9e-aa92-4490-b93e-975e6db79f7f" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 10: Prize Picker [Two for Tuesday: PDANUG Submission]</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,0ee05f9e-aa92-4490-b93e-975e6db79f7f.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/11/30DaysOfNETWindowsMobileApplicationsDay10PrizePickerTwoForTuesdayPDANUGSubmission.aspx</link>
      <pubDate>Wed, 11 Jun 2008 07:55:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I mentioned to the group that I would post the Prize Picker application we wrote together
on my blog as part of my 30 Days of .NET series. I think this was an awesome idea,
and it looked like everyone really enjoyed themselves. Hopefully, a few of them will
see this post and share their thoughts as well. It was very nice to have a hands on
type presentation that everyone got to participate in together. And since only one
person was “driving” we didn’t have to stop and fix a disconnected monitor. Ok, we
did one time, but just one time. &lt;img alt="Open-mouthed" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/teeth_smile.gif" /&gt;&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Big thanks to everyone that came out and participated! Page Brooks, Donny Craft, Benton
Little, , Jamey McElveen , Shawn Morris, and Thad Smith. It was a lot of fun!
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay10Pri_14904/PrizePicker_2.png"&gt;&lt;img title="PrizePicker" style="margin: 5px" height="455" alt="PrizePicker" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay10Pri_14904/PrizePicker_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Prize Picker&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
There is probably someone out there who doesn’t think this is the best looking application
ever. Well, you’re right! It’s not, but we didn’t really focus on that any until we
had a fully functional application. At that point it was time to pick prizes for the
lucky hopefuls that became winners at the event.
&lt;/p&gt;
&lt;p&gt;
The only big item we didn’t implement, was an item that came up right at the end,
we wanted to show the last winner in the area down at the bottom of the screen in
big blog letters. And we wanted to rotate through remaining hopefuls and then finally
pick a winner moving them to the winners table.
&lt;/p&gt;
&lt;p&gt;
The application is a firm believer of the &lt;a href="http://en.wikipedia.org/wiki/KISS_principle" target="_blank"&gt;KISS
principle&lt;/a&gt;. We did the entire application in about an hour and a half. And that
is including some refactorings, and changes we made along the way. I’m pretty happy
with the application, and will love it once we have the “Jackpot” style UI element
added.
&lt;/p&gt;
&lt;p&gt;
We added validation as we needed it, and decided to keep the applications logic in
the UI, as hard as it was for us to do, to in this case to follow our KISS guidelines.
&lt;/p&gt;
&lt;p&gt;
We have used RNGCryptoServiceProvider class already in the &lt;a href="http://www.cjcraft.com/blog/2008/06/07/30DaysOfNETWindowsMobileApplicationsDay06PocketPasswordGen.aspx" target="_blank"&gt;Pocket
PasswordGen&lt;/a&gt; application on day six. This class makes sure that our random numbers
are statistically random and not pretend watered down random.
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 55.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; Byte[]
randomBytes = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[4];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; RNGCryptoServiceProvider
rng = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RNGCryptoServiceProvider();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; rng.GetBytes(randomBytes);&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #008000"&gt;//
Convert 4 bytes into a 32-bit integer value.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; seed
= (randomBytes[0] &amp;amp; 0x7f) &amp;lt;&amp;lt; 24 |&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; randomBytes[1]
&amp;lt;&amp;lt; 16 |&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; randomBytes[2]
&amp;lt;&amp;lt; 8 |&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; randomBytes[3];&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pick
= seed % listViewHopefuls.Items.Count;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PrizePicker.CAB" target="_blank"&gt;prizePicker.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PrizePicker.zip" target="_blank"&gt;prizePicker.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The cool thing is we used this application to actually pick the winners for the prizes,
and everything went great. So our intention is to keep using it from now. We are also
going to post it on &lt;a href="http://codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt; soon
and allow others to work on it as well.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=0ee05f9e-aa92-4490-b93e-975e6db79f7f" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,0ee05f9e-aa92-4490-b93e-975e6db79f7f.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>INETA</category>
      <category>MVP</category>
      <category>PDANUG</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=24251ebc-ec13-4ae1-b0ba-c359914c113c</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,24251ebc-ec13-4ae1-b0ba-c359914c113c.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,24251ebc-ec13-4ae1-b0ba-c359914c113c.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=24251ebc-ec13-4ae1-b0ba-c359914c113c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Wow, today was a busy day. I gave a <a href="http://www.cjcraft.com/blog/2008/06/10/PDANUGEvent31ReminderTuesdayJune10th2008TopicWindowsMobileProgramming.aspx">Windows
Mobile Programming presentation</a> today at a .NET user group I help run, <a href="http://pdanug.net/">PDANUG</a>.
I changed it up at the very last minute, and instead of doing the presentation I was
planing on doing we wrote a Windows Mobile application together. It was great. I think
everyone contributed, and got something out of it. In the end we had a very nice Prize
Picker application that we will be able to use again and again in the future. And
I have a new talk that I can present. Any takers?
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay10Wha_13F94/image_2.png">
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay10Wha_13F94/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>What is My IP?</strong>
        </p>
        <p>
You may have seen sites like <a href="http://whatismyip.com/">WhatIsMyIP.com</a>, <a href="http://ipchicken.com/">IPChicken.com</a>,
and my favorite <a href="http://ipcow.com/">IPCow.com</a>. Most people prefer command
prompt and good ole <a href="http://en.wikipedia.org/wiki/Ipconfig">IPConfig</a>.
But sometimes when you are troubleshooting an issue with a friend of family member
over the phone that’s not always the best idea. Usually in those kind of situations
it is easier to send someone to a Web site and just have them read the value to you.
I think some of the sites above will render appropriately on a mobile device, pretty
sure <a href="http://ipcow.com/">IPCow.com</a> does.
</p>
        <p>
But what if you can’t connect to the Internet, and you need to see your Intranet IP
address. In this case, and many others, one wants something a little more direct,
and clear.
</p>
        <p>
For this reason, “What is My IP?” exists. It couldn’t be simpler. Run the program,
then see your IP address, or IP addresses in case you have multiple connections open.
Which is very possible with today’s devices, with everything from Bluetooth, cellular
connections, wireless connections, and more.
</p>
        <p>
This application only does one thing, so it needs to do it very well. And it needs
to be appealing in how it looks and how it does it.
</p>
        <p>
Since the application has minimal features, it has a minimalist style to it. There
is only one focus point of attention and that is the large network icon in the center
of the screen. Everything else is clean and simple.
</p>
        <p>
There’s only one method of note in this application: <strong>RefreshData()</strong></p>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 40.58%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> RefreshData()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span>
              <span style="color: #0000ff">string</span> deviceName
= System.Net.Dns.GetHostName();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span> textBoxDeviceName.Text
= deviceName;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> IPAddress[]
addresses = Dns.GetHostEntry(deviceName).AddressList;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 9:</span> comboBoxDeviceIP.Items.Clear();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 10:</span>
              <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i
= 0; i &lt; addresses.Length; i++)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 11:</span> comboBoxDeviceIP.Items.Add(addresses[i].ToString());</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 12:</span>  </pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 13:</span>
              <span style="color: #0000ff">if</span> (comboBoxDeviceIP.Items.Count
&gt; 0)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 14:</span> comboBoxDeviceIP.SelectedIndex
= 0;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 15:</span> }</pre>
          </div>
        </div>
        <p>
        </p>
        <p>
        </p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/WhatIsMyIP.CAB">whatIsMyIP.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/WhatIsMyIP.zip">whatIsMyIP.zip</a></p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
Not bad 10 applications in 10 days. Won’t be long before we’re at 20 applications
in 20 days, and then 30 applications in 30 days. Keep the feedback coming.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=24251ebc-ec13-4ae1-b0ba-c359914c113c" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 10: What is My IP?</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,24251ebc-ec13-4ae1-b0ba-c359914c113c.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/11/30DaysOfNETWindowsMobileApplicationsDay10WhatIsMyIP.aspx</link>
      <pubDate>Wed, 11 Jun 2008 07:14:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Wow, today was a busy day. I gave a &lt;a href="http://www.cjcraft.com/blog/2008/06/10/PDANUGEvent31ReminderTuesdayJune10th2008TopicWindowsMobileProgramming.aspx"&gt;Windows
Mobile Programming presentation&lt;/a&gt; today at a .NET user group I help run, &lt;a href="http://pdanug.net/"&gt;PDANUG&lt;/a&gt;.
I changed it up at the very last minute, and instead of doing the presentation I was
planing on doing we wrote a Windows Mobile application together. It was great. I think
everyone contributed, and got something out of it. In the end we had a very nice Prize
Picker application that we will be able to use again and again in the future. And
I have a new talk that I can present. Any takers?
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay10Wha_13F94/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay10Wha_13F94/image_thumb.png" width="293" align="left" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What is My IP?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
You may have seen sites like &lt;a href="http://whatismyip.com/"&gt;WhatIsMyIP.com&lt;/a&gt;, &lt;a href="http://ipchicken.com/"&gt;IPChicken.com&lt;/a&gt;,
and my favorite &lt;a href="http://ipcow.com/"&gt;IPCow.com&lt;/a&gt;. Most people prefer command
prompt and good ole &lt;a href="http://en.wikipedia.org/wiki/Ipconfig"&gt;IPConfig&lt;/a&gt;.
But sometimes when you are troubleshooting an issue with a friend of family member
over the phone that’s not always the best idea. Usually in those kind of situations
it is easier to send someone to a Web site and just have them read the value to you.
I think some of the sites above will render appropriately on a mobile device, pretty
sure &lt;a href="http://ipcow.com/"&gt;IPCow.com&lt;/a&gt; does.
&lt;/p&gt;
&lt;p&gt;
But what if you can’t connect to the Internet, and you need to see your Intranet IP
address. In this case, and many others, one wants something a little more direct,
and clear.
&lt;/p&gt;
&lt;p&gt;
For this reason, “What is My IP?” exists. It couldn’t be simpler. Run the program,
then see your IP address, or IP addresses in case you have multiple connections open.
Which is very possible with today’s devices, with everything from Bluetooth, cellular
connections, wireless connections, and more.
&lt;/p&gt;
&lt;p&gt;
This application only does one thing, so it needs to do it very well. And it needs
to be appealing in how it looks and how it does it.
&lt;/p&gt;
&lt;p&gt;
Since the application has minimal features, it has a minimalist style to it. There
is only one focus point of attention and that is the large network icon in the center
of the screen. Everything else is clean and simple.
&lt;/p&gt;
&lt;p&gt;
There’s only one method of note in this application: &lt;strong&gt;RefreshData()&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 40.58%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 210px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RefreshData()&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; deviceName
= System.Net.Dns.GetHostName();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; textBoxDeviceName.Text
= deviceName;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; IPAddress[]
addresses = Dns.GetHostEntry(deviceName).AddressList;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 9:&lt;/span&gt; comboBoxDeviceIP.Items.Clear();&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i
= 0; i &amp;lt; addresses.Length; i++)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 11:&lt;/span&gt; comboBoxDeviceIP.Items.Add(addresses[i].ToString());&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 13:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (comboBoxDeviceIP.Items.Count
&amp;gt; 0)&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 14:&lt;/span&gt; comboBoxDeviceIP.SelectedIndex
= 0;&lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 15:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/WhatIsMyIP.CAB"&gt;whatIsMyIP.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/WhatIsMyIP.zip"&gt;whatIsMyIP.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Not bad 10 applications in 10 days. Won’t be long before we’re at 20 applications
in 20 days, and then 30 applications in 30 days. Keep the feedback coming.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=24251ebc-ec13-4ae1-b0ba-c359914c113c" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,24251ebc-ec13-4ae1-b0ba-c359914c113c.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>MVP</category>
      <category>PDANUG</category>
      <category>personal</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=e646185a-b1f0-448a-a24b-ea856e00b508</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,e646185a-b1f0-448a-a24b-ea856e00b508.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,e646185a-b1f0-448a-a24b-ea856e00b508.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e646185a-b1f0-448a-a24b-ea856e00b508</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Tuesday, June 10th, 2008<a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/PDANUGEvent31ReminderTuesdayJune10th2008_7CC6/image_2.png"><img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="111" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/PDANUGEvent31ReminderTuesdayJune10th2008_7CC6/image_thumb.png" width="208" align="right" border="0" /></a><br /></strong>
          <strong>Chris Craft 
<br /></strong>
        </p>
        <p>
          <strong>
            <strong>Topic:</strong> Windows Mobile Programming 
<br /></strong>
        </p>
        <p>
Tuesday, June 10th, 2008, is the next meeting of the Pee Dee Area <a href="http://.net/">.NET</a> User
Group.
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/">Chris Craft</a> will be presenting at <a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032379835&amp;Culture=en-US">Microsoft
Mobility Roadshow</a> alongside <a href="http://www.structuretoobig.com/">Brian Hitney</a>, <a href="http://blogs.msdn.com/glengordon/">Glen
Gordon</a>, and <a href="http://geekswithblogs.net/lvega">Lou Vega</a> in <a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032379835&amp;Culture=en-US">Charlotte
- June 18, 2008</a> and <a href="http://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&amp;EventID=1032378497">Atlanta
(Alpharetta) - June 24, 2008</a>. These are full day Windows Mobile device application
development events.  PDANUG will be hosting our own special "Welcome to
the World of Windows Mobile" event to keep in theme these two MSDN events. 
<br />
Focus will be Windows Mobile 6.x and using Visual Studio 2008 to developer mobile
applications. 
<br />
Topics to be covered:
</p>
        <ul>
          <li>
      Intro to Windows Mobile</li>
          <li>
      Data Guidance (some discussion of line of business
applications)</li>
          <li>
      Whole New Level</li>
        </ul>
        <strong>Speaker Bio</strong>
        <br />
Chris Craft 
<br />
Pee Dee Area .NET User Group 
<br />
Florence, SC       
<br />
•    Microsoft Windows Mobile Device Application Development MVP 
<br />
•    Cofounder and regular speaker of Pee Dee Area .NET User Group. 
<br />
•    Frequent CodeProject.com article author. 
<br />
•    Expert's Exchange Windows Mobile Programming Master. 
<br />
Email: <a href="mailto:ccraft@pdanug.net">ccraft@pdanug.net</a><br />
Web: <a href="http://pdanug.net/">http://pdanug.net/</a><br />
Blog: <a href="http://cjcraft.com/blog/">http://cjcraft.com/blog/</a><p><a href="http://www.eventbrite.com/event/125072094"><img alt="" src="http://www.eventbrite.com/static/images/button_ext/register_now.gif" border="0" /></a></p><p><br />
Here is the tentative schedule: 
<br />
6:00 PM - 6:20 PM Socializing / Free Dinner 
<br />
6:20 PM - 6:30 PM Introduction, Sponsor Time, and News. 
<br />
6:30 PM - 8:00 PM Presentations
</p><img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e646185a-b1f0-448a-a24b-ea856e00b508" /></body>
      <title>PDANUG: Event #31 Reminder: Tuesday, June 10th, 2008, Topic: Windows Mobile Programming</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,e646185a-b1f0-448a-a24b-ea856e00b508.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/10/PDANUGEvent31ReminderTuesdayJune10th2008TopicWindowsMobileProgramming.aspx</link>
      <pubDate>Tue, 10 Jun 2008 16:52:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;Tuesday, June 10th, 2008&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/PDANUGEvent31ReminderTuesdayJune10th2008_7CC6/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="111" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/PDANUGEvent31ReminderTuesdayJune10th2008_7CC6/image_thumb.png" width="208" align="right" border="0" /&gt;&lt;/a&gt; 
&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;Chris Craft 
&lt;br /&gt;
&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;strong&gt;Topic:&lt;/strong&gt; Windows Mobile Programming 
&lt;br /&gt;
&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Tuesday, June 10th, 2008, is the next meeting of the Pee Dee Area &lt;a href="http://.net/"&gt;.NET&lt;/a&gt; User
Group.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/"&gt;Chris Craft&lt;/a&gt; will be presenting at &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032379835&amp;amp;Culture=en-US"&gt;Microsoft
Mobility Roadshow&lt;/a&gt; alongside &lt;a href="http://www.structuretoobig.com/"&gt;Brian Hitney&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/glengordon/"&gt;Glen
Gordon&lt;/a&gt;, and &lt;a href="http://geekswithblogs.net/lvega"&gt;Lou Vega&lt;/a&gt; in &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032379835&amp;amp;Culture=en-US"&gt;Charlotte
- June 18, 2008&lt;/a&gt; and &lt;a href="http://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032378497"&gt;Atlanta
(Alpharetta) - June 24, 2008&lt;/a&gt;. These are full day Windows Mobile device application
development events.&amp;#160; PDANUG will be hosting our own special &amp;quot;Welcome to
the World of Windows Mobile&amp;quot; event to keep in theme these two MSDN events. 
&lt;br /&gt;
Focus will be Windows Mobile 6.x and using Visual Studio 2008 to developer mobile
applications. 
&lt;br /&gt;
Topics to be covered:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Intro to Windows Mobile&lt;/li&gt;
&lt;li&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Data Guidance (some discussion of line of business
applications)&lt;/li&gt;
&lt;li&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Whole New Level&lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;Speaker Bio&lt;/strong&gt; 
&lt;br /&gt;
Chris Craft 
&lt;br /&gt;
Pee Dee Area .NET User Group 
&lt;br /&gt;
Florence, SC&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Microsoft Windows Mobile Device Application Development MVP 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Cofounder and regular speaker of Pee Dee Area .NET User Group. 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Frequent CodeProject.com article author. 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Expert's Exchange Windows Mobile Programming Master. 
&lt;br /&gt;
Email: &lt;a href="mailto:ccraft@pdanug.net"&gt;ccraft@pdanug.net&lt;/a&gt; 
&lt;br /&gt;
Web: &lt;a href="http://pdanug.net/"&gt;http://pdanug.net/&lt;/a&gt; 
&lt;br /&gt;
Blog: &lt;a href="http://cjcraft.com/blog/"&gt;http://cjcraft.com/blog/&lt;/a&gt; 
&lt;p&gt;
&lt;a href="http://www.eventbrite.com/event/125072094"&gt;&lt;img alt="" src="http://www.eventbrite.com/static/images/button_ext/register_now.gif" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
Here is the tentative schedule: 
&lt;br /&gt;
6:00 PM - 6:20 PM Socializing / Free Dinner 
&lt;br /&gt;
6:20 PM - 6:30 PM Introduction, Sponsor Time, and News. 
&lt;br /&gt;
6:30 PM - 8:00 PM Presentations
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e646185a-b1f0-448a-a24b-ea856e00b508" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,e646185a-b1f0-448a-a24b-ea856e00b508.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>PDANUG</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=2a077ad1-6d97-4e1f-bd61-8be82d08e42d</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,2a077ad1-6d97-4e1f-bd61-8be82d08e42d.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,2a077ad1-6d97-4e1f-bd61-8be82d08e42d.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2a077ad1-6d97-4e1f-bd61-8be82d08e42d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today's application is meant to be a simple, yet useful, application for people to
use out on the town. This is an application that a couple of my friends recommended
as a good beginner's introduction application to programming for the .NET Compact
Framework. One thing I really like about it is that there is nothing to get in the
way of a new developer's understanding of what is going on in this application. Everything
is direct and straight-forward.
</p>
        <p>
If you have ever eaten out with a large group of friends and wanted to split the tip,
then you probably know how much of a challenge this can be. It seems trivial at first
glance, but there is a decent set of variable inputs, and another good size set of
outputs. All of which are interrelated. But that is the past, now you have Mobile
Tipper to take care of the hard work for you.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay09Mob_12F2B/image_8.png">
            <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay09Mob_12F2B/image_thumb_3.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Mobile Tipper</strong>
        </p>
        <p>
There's not a whole lot going on with the UI. It is still clean and simple. I have
colored the output fields in a light yellow color, and I have added an icon to the
top right of the screen for decoration. Also, notice we are formatting our outputs,
and allowing users to enter '%' and '$' characters in the inputs. This is a nice touch
of polish that users appreciate. The icon in the top right is also the icon for the
applications and the forms themselves. (I couldn't take it; I decided to give the
application, a famous light blue color to give it a little life.)
</p>
        <p>
 
</p>
        <p>
There's a lot of fields, and this is technically a mobile data entry application.
So we want to enable our users to enter data as easily as possible. That's why we
are using editable comboboxes, and allowing users to enter '%' and '&amp;' characters.
The comboboxes are pre-populated with a likely set of inputs users will want to use.
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay09Mob_12F2B/image_6.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay09Mob_12F2B/image_thumb_2.png" width="155" align="right" border="0" />
          </a>One
thing I did also to help with data entry is I assign tab orders to all my input controls,
and marked all my output controls TabStop properties as false so they would be skipped
over.
</p>
        <p>
I implemented a Tip class that handles all the math calculations, and so on. And I
created NumericTextBoxes and NumericComboBoxes that only allow numeric data to be
entered. Again try to make end users lives easier.
</p>
        <p>
You might be wondering what my secret is to handling the character's '%' and '$',
it is the trusty String.Replace() method. I replace both of those characters with
String.Empty's. :D
</p>
        <blockquote>
          <p>
            <strong>     return Decimal.Parse(this.Text.Replace("$", string.Empty).Replace("%",
string.Empty));</strong>
          </p>
        </blockquote>
        <p>
I came close to skinning this application with some kind of butler them skin. Basically
a white and black theme with a little bowtie band somewhere across the top, or middle
with a watermarked jacket front in the application form's background. But decided
it probably wouldn't end up looking like it does in my head.
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileTipper.CAB">mobileTipper.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileCapture.zip">mobileTipper.zip</a></p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
Tomorrow will be our tenth application, and mark us at 1/3 complete. So far I have
managed to design, create, publish, and explain a new and different .NET Compact Framework
application everyday. My goal is to do it everyday this month. Your support really
makes a difference so keep it coming!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=2a077ad1-6d97-4e1f-bd61-8be82d08e42d" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 09: Mobile Tipper</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,2a077ad1-6d97-4e1f-bd61-8be82d08e42d.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/10/30DaysOfNETWindowsMobileApplicationsDay09MobileTipper.aspx</link>
      <pubDate>Tue, 10 Jun 2008 05:18:51 GMT</pubDate>
      <description>&lt;p&gt;
Today's application is meant to be a simple, yet useful, application for people to
use out on the town. This is an application that a couple of my friends recommended
as a good beginner's introduction application to programming for the .NET Compact
Framework. One thing I really like about it is that there is nothing to get in the
way of a new developer's understanding of what is going on in this application. Everything
is direct and straight-forward.
&lt;/p&gt;
&lt;p&gt;
If you have ever eaten out with a large group of friends and wanted to split the tip,
then you probably know how much of a challenge this can be. It seems trivial at first
glance, but there is a decent set of variable inputs, and another good size set of
outputs. All of which are interrelated. But that is the past, now you have Mobile
Tipper to take care of the hard work for you.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay09Mob_12F2B/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay09Mob_12F2B/image_thumb_3.png" width="293" align="left" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mobile Tipper&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
There's not a whole lot going on with the UI. It is still clean and simple. I have
colored the output fields in a light yellow color, and I have added an icon to the
top right of the screen for decoration. Also, notice we are formatting our outputs,
and allowing users to enter '%' and '$' characters in the inputs. This is a nice touch
of polish that users appreciate. The icon in the top right is also the icon for the
applications and the forms themselves. (I couldn't take it; I decided to give the
application, a famous light blue color to give it a little life.)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
There's a lot of fields, and this is technically a mobile data entry application.
So we want to enable our users to enter data as easily as possible. That's why we
are using editable comboboxes, and allowing users to enter '%' and '&amp;amp;' characters.
The comboboxes are pre-populated with a likely set of inputs users will want to use.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay09Mob_12F2B/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay09Mob_12F2B/image_thumb_2.png" width="155" align="right" border="0"&gt;&lt;/a&gt;One
thing I did also to help with data entry is I assign tab orders to all my input controls,
and marked all my output controls TabStop properties as false so they would be skipped
over.
&lt;/p&gt;
&lt;p&gt;
I implemented a Tip class that handles all the math calculations, and so on. And I
created NumericTextBoxes and NumericComboBoxes that only allow numeric data to be
entered. Again try to make end users lives easier.
&lt;/p&gt;
&lt;p&gt;
You might be wondering what my secret is to handling the character's '%' and '$',
it is the trusty String.Replace() method. I replace both of those characters with
String.Empty's. :D
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Decimal.Parse(this.Text.Replace("$", string.Empty).Replace("%",
string.Empty));&lt;/strong&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I came close to skinning this application with some kind of butler them skin. Basically
a white and black theme with a little bowtie band somewhere across the top, or middle
with a watermarked jacket front in the application form's background. But decided
it probably wouldn't end up looking like it does in my head.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileTipper.CAB"&gt;mobileTipper.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileCapture.zip"&gt;mobileTipper.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Tomorrow will be our tenth application, and mark us at 1/3 complete. So far I have
managed to design, create, publish, and explain a new and different .NET Compact Framework
application everyday. My goal is to do it everyday this month. Your support really
makes a difference so keep it coming!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=2a077ad1-6d97-4e1f-bd61-8be82d08e42d" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,2a077ad1-6d97-4e1f-bd61-8be82d08e42d.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=403185cf-00fd-4b77-9f04-4d1bd660089e</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,403185cf-00fd-4b77-9f04-4d1bd660089e.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,403185cf-00fd-4b77-9f04-4d1bd660089e.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=403185cf-00fd-4b77-9f04-4d1bd660089e</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wow, time sure does fly when you're having fun. Since the beginning of the June, we
have already knocked out over a half-a-dozen applications. It's hard for me to choose
a favorite, as there is such variety, and many of you submitted great application
ideas. If I had to pick a favorite, I think I would pick <a href="http://www.cjcraft.com/blog/2008/06/08/30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx">Mobile
FX</a>, since it is just fun.
</p>
        <p>
          <strong>What's your favorite?</strong>
        </p>
        <p>
 
</p>
        <table cellspacing="0" cellpadding="2" width="696" border="0">
          <tbody>
            <tr>
              <td valign="top" width="173">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_2.png">
                  <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="174">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_4.png">
                  <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_1.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="174">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_6.png">
                  <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_2.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="173">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_8.png">
                  <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_3.png" width="155" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="173">
                <a href="http://www.cjcraft.com/blog/2008/06/02/30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx">Minutes
to Midnight Countdown</a>
              </td>
              <td valign="top" width="174">
                <a href="http://www.cjcraft.com/blog/2008/06/03/30DaysOfNETWindowsMobileApplicationsDay02BluetoothManager.aspx">Bluetooth
Manager</a>
              </td>
              <td valign="top" width="174">
                <a href="http://www.cjcraft.com/blog/2008/06/04/30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx">GPS
Compass</a>
              </td>
              <td valign="top" width="174">
                <a href="http://www.cjcraft.com/blog/2008/06/05/30DaysOfNETWindowsMobileApplicationsDay04MileageTracker.aspx">Mileage
Tracker</a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
Look at the variety: a countdown time, a Bluetooth control panel type application,
a GPS application, and a work utility.
</p>
        <p>
 
</p>
        <table cellspacing="0" cellpadding="2" width="400" border="0">
          <tbody>
            <tr>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_10.png">
                  <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_4.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_12.png">
                  <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_5.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_14.png">
                  <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_6.png" width="155" align="left" border="0" />
                </a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_16.png">
                  <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_7.png" width="159" align="left" border="0" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/2008/06/06/30DaysOfNETWindowsMobileApplicationsDay05MobileCapture.aspx">Mobile
Capture</a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/2008/06/07/30DaysOfNETWindowsMobileApplicationsDay06PocketPasswordGen.aspx">Pocket
PasswordGen</a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/2008/06/08/30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx">Mobile
FX</a>
              </td>
              <td valign="top" width="100">
                <a href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsDay08RotateMe.aspx">What
will be next?</a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
Again, we get around as far as application topics: screen shot utility, password generator,
a sound FX app, and who know's what we'll do next...
</p>
        <p>
          <strong>Looking forward to this week's applications?</strong> Let's see where we'll
go next.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Week One</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,403185cf-00fd-4b77-9f04-4d1bd660089e.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsWeekOne.aspx</link>
      <pubDate>Mon, 09 Jun 2008 15:08:06 GMT</pubDate>
      <description>&lt;p&gt;
Wow, time sure does fly when you're having fun. Since the beginning of the June, we
have already knocked out over a half-a-dozen applications. It's hard for me to choose
a favorite, as there is such variety, and many of you submitted great application
ideas. If I had to pick a favorite, I think I would pick &lt;a href="http://www.cjcraft.com/blog/2008/06/08/30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx"&gt;Mobile
FX&lt;/a&gt;, since it is just fun.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What's your favorite?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="696" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="173"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb.png" width="155" align="left" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="174"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_1.png" width="155" align="left" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="174"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_2.png" width="155" align="left" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="173"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_3.png" width="155" align="left" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="173"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/02/30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx"&gt;Minutes
to Midnight Countdown&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="174"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/03/30DaysOfNETWindowsMobileApplicationsDay02BluetoothManager.aspx"&gt;Bluetooth
Manager&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="174"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/04/30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx"&gt;GPS
Compass&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="174"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/05/30DaysOfNETWindowsMobileApplicationsDay04MileageTracker.aspx"&gt;Mileage
Tracker&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Look at the variety: a countdown time, a Bluetooth control panel type application,
a GPS application, and a work utility.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_10.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_4.png" width="155" align="left" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_12.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_5.png" width="155" align="left" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_14.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_6.png" width="155" align="left" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_16.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Da.NETWindowsMobileApplicationsWeekOne_645F/image_thumb_7.png" width="159" align="left" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/06/30DaysOfNETWindowsMobileApplicationsDay05MobileCapture.aspx"&gt;Mobile
Capture&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/07/30DaysOfNETWindowsMobileApplicationsDay06PocketPasswordGen.aspx"&gt;Pocket
PasswordGen&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/08/30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx"&gt;Mobile
FX&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="100"&gt;
&lt;a href="http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsDay08RotateMe.aspx"&gt;What
will be next?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Again, we get around as far as application topics: screen shot utility, password generator,
a sound FX app, and who know's what we'll do next...
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Looking forward to this week's applications?&lt;/strong&gt; Let's see where we'll
go next.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=403185cf-00fd-4b77-9f04-4d1bd660089e" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,403185cf-00fd-4b77-9f04-4d1bd660089e.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=028f12df-8a80-4971-a5c2-30735b16287d</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,028f12df-8a80-4971-a5c2-30735b16287d.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,028f12df-8a80-4971-a5c2-30735b16287d.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=028f12df-8a80-4971-a5c2-30735b16287d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWelcomesitsnewCEditorChristopherF_14DE9/image_2.png">
            <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="123" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWelcomesitsnewCEditorChristopherF_14DE9/image_thumb.png" width="184" align="right" border="0" />
          </a> Wow,
things are really moving around here. First <a href="http://geekswithblogs.net/lvega/Default.aspx">Lou
Vega</a> offers to help with 30 Days of .NET as the <a href="http://www.cjcraft.com/blog/2008/06/03/30DaysOfNETWelcomesItsNewVBNETEditorLouVega.aspx">VB
.NET Editor</a>. And now <a href="http://www.christec.co.nz/blog/">Christopher Fairbairn</a> has
offered to help as the C++ Editor. 
</p>
        <p>
A little about Christopher: 
</p>
        <p>
Christopher is the leader of the <a href="http://www.dot.net.nz/Default.aspx?tabid=31">Christchurch
.NET User Group</a>. In case you didn't already know, <a href="http://en.wikipedia.org/wiki/Christchurch">Christchurch</a> is
in New Zealand. (Pretty cool reading about their climate, and I didn't realize they
are know as the "Gateway to the Antarctic"). Christopher has a great blog mostly focused
on Windows Mobile C++ development, which can be hard to find good information on when
you are first starting out. Be sure to take a moment and read Christopher's "<a href="http://www.christec.co.nz/blog/about/">About
Me</a>" page. I think you'll agree that we are lucky to have him on the team, and
that we are looking forward to seeing take on device application development for Windows
Mobile. 
</p>
        <p>
  
</p>
        <p>
So far, Christopher is off to a great start having already reproduced two of the applications
I have written. One of the thing I really enjoy is reading the blog post Christopher
does for application he translates. He a great job of explaining the nuts and bolts
of everything that he is doing. He is very detailed and very thorough, you can learn
a lot simply following along with him 
</p>
        <blockquote>
          <p>
            <strong>Day 01 - 30 Days of .NET [Windows Mobile Applications]: Minutes to Midnight
Countdown</strong>: <a href="http://www.cjcraft.com/blog/2008/06/03/30DaysOfNETWindowsMobileApplicationsDay02BluetoothManager.aspx">C#
Edition</a> / <a href="http://www.christec.co.nz/blog/archives/350">C++ Edition</a></p>
          <p>
            <strong>Day 02 - 30 Days of .NET [Windows Mobile Applications]: Bluetooth Manager</strong>: <a href="http://www.cjcraft.com/blog/2008/06/02/30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx">C#
Edition</a> / <a href="http://www.christec.co.nz/blog/archives/353">C++ Edition</a></p>
        </blockquote>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=028f12df-8a80-4971-a5c2-30735b16287d" />
      </body>
      <title>30 Days of .NET Welcomes its new C++ Editor: Christopher Fairbairn</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,028f12df-8a80-4971-a5c2-30735b16287d.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWelcomesItsNewCEditorChristopherFairbairn.aspx</link>
      <pubDate>Mon, 09 Jun 2008 07:44:39 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWelcomesitsnewCEditorChristopherF_14DE9/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="123" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWelcomesitsnewCEditorChristopherF_14DE9/image_thumb.png" width="184" align="right" border="0"&gt;&lt;/a&gt; Wow,
things are really moving around here. First &lt;a href="http://geekswithblogs.net/lvega/Default.aspx"&gt;Lou
Vega&lt;/a&gt; offers to help with 30 Days of .NET as the &lt;a href="http://www.cjcraft.com/blog/2008/06/03/30DaysOfNETWelcomesItsNewVBNETEditorLouVega.aspx"&gt;VB
.NET Editor&lt;/a&gt;. And now &lt;a href="http://www.christec.co.nz/blog/"&gt;Christopher Fairbairn&lt;/a&gt; has
offered to help as the C++ Editor. 
&lt;p&gt;
A little about Christopher: 
&lt;p&gt;
Christopher is the leader of the &lt;a href="http://www.dot.net.nz/Default.aspx?tabid=31"&gt;Christchurch
.NET User Group&lt;/a&gt;. In case you didn't already know, &lt;a href="http://en.wikipedia.org/wiki/Christchurch"&gt;Christchurch&lt;/a&gt; is
in New Zealand. (Pretty cool reading about their climate, and I didn't realize they
are know as the "Gateway to the Antarctic"). Christopher has a great blog mostly focused
on Windows Mobile C++ development, which can be hard to find good information on when
you are first starting out. Be sure to take a moment and read Christopher's "&lt;a href="http://www.christec.co.nz/blog/about/"&gt;About
Me&lt;/a&gt;" page. I think you'll agree that we are lucky to have him on the team, and
that we are looking forward to seeing take on device application development for Windows
Mobile. 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
So far, Christopher is off to a great start having already reproduced two of the applications
I have written. One of the thing I really enjoy is reading the blog post Christopher
does for application he translates. He a great job of explaining the nuts and bolts
of everything that he is doing. He is very detailed and very thorough, you can learn
a lot simply following along with him &lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Day 01 - 30 Days of .NET [Windows Mobile Applications]: Minutes to Midnight
Countdown&lt;/strong&gt;: &lt;a href="http://www.cjcraft.com/blog/2008/06/03/30DaysOfNETWindowsMobileApplicationsDay02BluetoothManager.aspx"&gt;C#
Edition&lt;/a&gt; / &lt;a href="http://www.christec.co.nz/blog/archives/350"&gt;C++ Edition&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Day 02 - 30 Days of .NET [Windows Mobile Applications]: Bluetooth Manager&lt;/strong&gt;: &lt;a href="http://www.cjcraft.com/blog/2008/06/02/30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx"&gt;C#
Edition&lt;/a&gt; / &lt;a href="http://www.christec.co.nz/blog/archives/353"&gt;C++ Edition&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=028f12df-8a80-4971-a5c2-30735b16287d" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,028f12df-8a80-4971-a5c2-30735b16287d.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>embedded visual c++</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=ed59e621-f595-4e2e-8505-2f0eb1373581</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,ed59e621-f595-4e2e-8505-2f0eb1373581.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,ed59e621-f595-4e2e-8505-2f0eb1373581.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ed59e621-f595-4e2e-8505-2f0eb1373581</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yesterday, I read the following <a href="http://www.cjcraft.com/blog/CommentView,guid,29c95c25-3629-4aca-bcc8-59e5276cf54d.aspx#commentstart">suggestion</a> for
the 30 Days of .NET series.
</p>
        <blockquote>
          <table cellspacing="0" cellpadding="2" width="861" border="0">
            <tbody>
              <tr>
                <td valign="top" width="859">
                  <p align="right">
                    <strong>"How about a program to manually rotate from portrait to landscape, the millions
of new HTC Diamond owners would love that :-)"</strong>
                  </p>
                  <p align="right">
                    <strong>- Alex</strong>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
        </blockquote>
        <p>
Lucky guy, the <a href="http://www.htc.com/www/product.aspx?id=46278">HTC Diamond</a> is
a gorgeous device. I mean really, really good looking device - if <a href="http://www.imdb.com/name/nm0424060/">Scarlett
Johansson</a> were a phone good looking here.
</p>
        <p>
Don't take my word for it. See for yourself:
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_6.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="222" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_thumb_2.png" width="149" align="left" border="0" />
          </a>
        </p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="222" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_thumb.png" width="516" align="left" border="0" />
          </a>
        </p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_8.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="244" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_thumb_3.png" width="184" align="left" border="0" />
          </a>
        </p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_10.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="244" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_thumb_4.png" width="184" align="left" border="0" />
          </a> On
my HTC device there is an today plug-in named "HTC Home", that gives me an icon I
can click on my today screen which will rotate my device's screen. See screen capture,
I've converted everything else to grayscale.
</p>
        <p>
This is a great little app, that does everything it claims it will do. Only thing
is I hate it. I hate it because it doesn't do what I want it to do. It rotates through
all four combinations of screen directions: top (0 degrees), left (90 degrees), bottom
(180 degrees), and right (270 degrees). <strong>See that's the rub, never want to
see my device upside down.</strong></p>
        <p>
So basically, every time you click this icon the screen rotates 90 degrees, which
means I have to go through what I consider two <em>junk</em> orientations, bleh.
</p>
        <p>
I think we can do better.
</p>
        <p>
          <strong>This is probably going to be the easiest application we write. Thanks, Alex!
;D</strong>
        </p>
        <p>
I considered a few approaches to this application. I thought about following the same
model as HTC and placing the application somewhere on the Today screen. Basically
there are three ways to accomplish this. One we could write a today screen plug-in,
but this isn't straight-forward in an managed application. There is a way to do it
however: <a href="http://msdn.microsoft.com/en-us/library/ms839442.aspx">Creating
a Pocket PC Today Screen Plug-in with the .NET Compact Framework</a>. 
</p>
        <p>
Or we could create a task tray icon for our application. If you look right about the
Contacts menu item in the bottom right of my screen, you can see three application
task tray icons. Again, I felt this was more work than worth. But here how you could
do it: <a href="http://msdn.microsoft.com/en-us/library/aa446525.aspx">Using the Microsoft
.NET Compact Framework MessageWindow Class</a>.
</p>
        <p>
Finally, I though we could add an icon to the notification area at the top-right of
the screen. If you'll look at my screenshot again you'll see where I have 6, count
them 6, notification icons on my device. Everyone is doing this lately, and it starting
to get out of hand lately. But if you like here's the information you'll need to accomplish
this: <a href="http://www.christec.co.nz/blog/archives/104">Programmatically create
and display Notifications</a>.
</p>
        <p>
So what was my solution? <strong>Well, I decided to leave well enough alone.</strong> This
leaves the end user three choices, one assign the application to hardware button,
to assign the application to a today screen plug-in that can launch other applications,
and three to simply run the application manually. A lot of today screen plugs-ins
have application launchers capabilities. Back to my screenshots, the today screen
plug-in at the top of the screen allows for nine applications to be started from it.
I've highlight the icon for Rotate Me, and made the rest the screen grayscale.
</p>
        <p>
          <strong>So how hard is it to check the screen orientation and change it? You tell
me.</strong>
        </p>
        <blockquote>
          <p>
using Microsoft.WindowsCE.Forms; 
</p>
          <p>
if (SystemSettings.ScreenOrientation == ScreenOrientation.Angle0)<br />
    SystemSettings.ScreenOrientation = ScreenOrientation.Angle90;<br />
else<br />
    SystemSettings.ScreenOrientation = ScreenOrientation.Angle0;
</p>
        </blockquote>
        <p>
Here's a link to a blog post I did on <a href="http://www.cjcraft.com/blog/2008/06/09/HowToAssignAnApplicationToAWindowsMobileDevicesHardwareButton.aspx">How
To: Assign an Application to a Windows Mobile Device's Hardware Button</a> in case
you need it.
</p>
        <p>
Sometimes it is surprising just how much you can get for such little time and effort. <strong>That's
the power of the .NET Compact Framework.</strong></p>
        <p>
Well, that does it for today. Here are the binaries. Hope you enjoy them.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/RotateMe.CAB">rotateMe.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/RotateMe.zip">rotateMe.zip</a></p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
Thanks guys, it's been fun. Keep the ideas coming. Don't wait until the last minute.
I hope these applications are helping you realize the raw rapid application development
power of the .NET Compact Framework.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=ed59e621-f595-4e2e-8505-2f0eb1373581" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 08: Rotate Me</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,ed59e621-f595-4e2e-8505-2f0eb1373581.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/09/30DaysOfNETWindowsMobileApplicationsDay08RotateMe.aspx</link>
      <pubDate>Mon, 09 Jun 2008 04:00:25 GMT</pubDate>
      <description>&lt;p&gt;
Yesterday, I read the following &lt;a href="http://www.cjcraft.com/blog/CommentView,guid,29c95c25-3629-4aca-bcc8-59e5276cf54d.aspx#commentstart"&gt;suggestion&lt;/a&gt; for
the 30 Days of .NET series.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;table cellspacing="0" cellpadding="2" width="861" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="859"&gt;
&lt;p align="right"&gt;
&lt;strong&gt;"How about a program to manually rotate from portrait to landscape, the millions
of new HTC Diamond owners would love that :-)"&lt;/strong&gt;
&lt;/p&gt;
&lt;p align="right"&gt;
&lt;strong&gt;- Alex&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Lucky guy, the &lt;a href="http://www.htc.com/www/product.aspx?id=46278"&gt;HTC Diamond&lt;/a&gt; is
a gorgeous device. I mean really, really good looking device - if &lt;a href="http://www.imdb.com/name/nm0424060/"&gt;Scarlett
Johansson&lt;/a&gt; were a phone good looking here.
&lt;/p&gt;
&lt;p&gt;
Don't take my word for it. See for yourself:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="222" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_thumb_2.png" width="149" align="left" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="222" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_thumb.png" width="516" align="left" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="244" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_thumb_3.png" width="184" align="left" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="244" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay08Rot_10392/image_thumb_4.png" width="184" align="left" border="0"&gt;&lt;/a&gt; On
my HTC device there is an today plug-in named "HTC Home", that gives me an icon I
can click on my today screen which will rotate my device's screen. See screen capture,
I've converted everything else to grayscale.
&lt;/p&gt;
&lt;p&gt;
This is a great little app, that does everything it claims it will do. Only thing
is I hate it. I hate it because it doesn't do what I want it to do. It rotates through
all four combinations of screen directions: top (0 degrees), left (90 degrees), bottom
(180 degrees), and right (270 degrees). &lt;strong&gt;See that's the rub, never want to
see my device upside down.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
So basically, every time you click this icon the screen rotates 90 degrees, which
means I have to go through what I consider two &lt;em&gt;junk&lt;/em&gt; orientations, bleh.
&lt;/p&gt;
&lt;p&gt;
I think we can do better.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;This is probably going to be the easiest application we write. Thanks, Alex!
;D&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I considered a few approaches to this application. I thought about following the same
model as HTC and placing the application somewhere on the Today screen. Basically
there are three ways to accomplish this. One we could write a today screen plug-in,
but this isn't straight-forward in an managed application. There is a way to do it
however: &lt;a href="http://msdn.microsoft.com/en-us/library/ms839442.aspx"&gt;Creating
a Pocket PC Today Screen Plug-in with the .NET Compact Framework&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Or we could create a task tray icon for our application. If you look right about the
Contacts menu item in the bottom right of my screen, you can see three application
task tray icons. Again, I felt this was more work than worth. But here how you could
do it: &lt;a href="http://msdn.microsoft.com/en-us/library/aa446525.aspx"&gt;Using the Microsoft
.NET Compact Framework MessageWindow Class&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Finally, I though we could add an icon to the notification area at the top-right of
the screen. If you'll look at my screenshot again you'll see where I have 6, count
them 6, notification icons on my device. Everyone is doing this lately, and it starting
to get out of hand lately. But if you like here's the information you'll need to accomplish
this: &lt;a href="http://www.christec.co.nz/blog/archives/104"&gt;Programmatically create
and display Notifications&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
So what was my solution? &lt;strong&gt;Well, I decided to leave well enough alone.&lt;/strong&gt; This
leaves the end user three choices, one assign the application to hardware button,
to assign the application to a today screen plug-in that can launch other applications,
and three to simply run the application manually. A lot of today screen plugs-ins
have application launchers capabilities. Back to my screenshots, the today screen
plug-in at the top of the screen allows for nine applications to be started from it.
I've highlight the icon for Rotate Me, and made the rest the screen grayscale.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;So how hard is it to check the screen orientation and change it? You tell
me.&lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
using Microsoft.WindowsCE.Forms; 
&lt;p&gt;
if (SystemSettings.ScreenOrientation == ScreenOrientation.Angle0)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemSettings.ScreenOrientation = ScreenOrientation.Angle90;&lt;br&gt;
else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemSettings.ScreenOrientation = ScreenOrientation.Angle0;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Here's a link to a blog post I did on &lt;a href="http://www.cjcraft.com/blog/2008/06/09/HowToAssignAnApplicationToAWindowsMobileDevicesHardwareButton.aspx"&gt;How
To: Assign an Application to a Windows Mobile Device's Hardware Button&lt;/a&gt; in case
you need it.
&lt;/p&gt;
&lt;p&gt;
Sometimes it is surprising just how much you can get for such little time and effort. &lt;strong&gt;That's
the power of the .NET Compact Framework.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Well, that does it for today. Here are the binaries. Hope you enjoy them.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/RotateMe.CAB"&gt;rotateMe.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/RotateMe.zip"&gt;rotateMe.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks guys, it's been fun. Keep the ideas coming. Don't wait until the last minute.
I hope these applications are helping you realize the raw rapid application development
power of the .NET Compact Framework.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=ed59e621-f595-4e2e-8505-2f0eb1373581" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,ed59e621-f595-4e2e-8505-2f0eb1373581.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=3321ced9-d024-497f-b936-733f80bed490</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,3321ced9-d024-497f-b936-733f80bed490.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,3321ced9-d024-497f-b936-733f80bed490.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3321ced9-d024-497f-b936-733f80bed490</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is my favorite application so far. The concept is awesome. It takes the idea
of a "<a href="http://www.thinkgeek.com/geektoys/cubegoodies/98db/?cpg=ab">sound effect
keychain</a>", and make it into a fully open and extensible mobile application.
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay07Mob_14B35/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay07Mob_14B35/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Mobile FX</strong>
        </p>
        <p>
So if you are following me, then you know that if you press the birds button you'll
hear a birds sound effect, and if you press the bomb button your hear a bomb sound
effect, and son on down the list.
</p>
        <p>
This application tries to be as much about form as it is function. All of the icon
graphics are created with <a href="http://www.axialis.com/iconworkshop/">Axialis IconWorkshop</a>.
(Thanks for the heads up, <a href="http://www.jmcode.com/">Jamey</a>!) It makes making
really great icons a snap using its <a href="http://www.axialis.com/objects/">Image
Object Packs</a>. (See the image to the right for a small sample.)
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay07Mob_14B35/image_4.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="121" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay07Mob_14B35/image_thumb_1.png" width="180" align="right" border="0" />
          </a>
        </p>
        <p>
What I really like about this application is there is the possibility of creating
add-in sound packages. I'll discuss this more in a follow up blog posting to come
soon. [<strong>If there is interest? Let me know.</strong>]
</p>
        <p>
The way the application works is it looks for an XML file that tells it where each
of its possible icons are and where the sound files for each icon are located as well.
If you want to change the order of the icons on the screen just change the order of
the "buttons" in the XML configuration file.
</p>
        <p>
I haven't completed the extensibility point for others to add there own icons and
sounds but that is a small enhancement which I'll do shortly.
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileFX.cab">mobileFX.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileFX.zip">passwordGen.zip</a></p>
        <p>
          <strong>Feedback:</strong>
        </p>
        <p>
How interested are you guys in the follow up article? Is this something you would
enjoy? Would you like a second pack of sounds? Is this application something you would
use? Would you create a sound pack of your own?
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=3321ced9-d024-497f-b936-733f80bed490" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 07: Mobile FX</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,3321ced9-d024-497f-b936-733f80bed490.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/08/30DaysOfNETWindowsMobileApplicationsDay07MobileFX.aspx</link>
      <pubDate>Sun, 08 Jun 2008 07:52:33 GMT</pubDate>
      <description>&lt;p&gt;
This is my favorite application so far. The concept is awesome. It takes the idea
of a "&lt;a href="http://www.thinkgeek.com/geektoys/cubegoodies/98db/?cpg=ab"&gt;sound effect
keychain&lt;/a&gt;", and make it into a fully open and extensible mobile application.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay07Mob_14B35/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay07Mob_14B35/image_thumb.png" width="293" align="left" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mobile FX&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
So if you are following me, then you know that if you press the birds button you'll
hear a birds sound effect, and if you press the bomb button your hear a bomb sound
effect, and son on down the list.
&lt;/p&gt;
&lt;p&gt;
This application tries to be as much about form as it is function. All of the icon
graphics are created with &lt;a href="http://www.axialis.com/iconworkshop/"&gt;Axialis IconWorkshop&lt;/a&gt;.
(Thanks for the heads up, &lt;a href="http://www.jmcode.com/"&gt;Jamey&lt;/a&gt;!) It makes making
really great icons a snap using its &lt;a href="http://www.axialis.com/objects/"&gt;Image
Object Packs&lt;/a&gt;. (See the image to the right for a small sample.)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay07Mob_14B35/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="121" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay07Mob_14B35/image_thumb_1.png" width="180" align="right" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
What I really like about this application is there is the possibility of creating
add-in sound packages. I'll discuss this more in a follow up blog posting to come
soon. [&lt;strong&gt;If there is interest? Let me know.&lt;/strong&gt;]
&lt;/p&gt;
&lt;p&gt;
The way the application works is it looks for an XML file that tells it where each
of its possible icons are and where the sound files for each icon are located as well.
If you want to change the order of the icons on the screen just change the order of
the "buttons" in the XML configuration file.
&lt;/p&gt;
&lt;p&gt;
I haven't completed the extensibility point for others to add there own icons and
sounds but that is a small enhancement which I'll do shortly.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileFX.cab"&gt;mobileFX.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileFX.zip"&gt;passwordGen.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
How interested are you guys in the follow up article? Is this something you would
enjoy? Would you like a second pack of sounds? Is this application something you would
use? Would you create a sound pack of your own?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=3321ced9-d024-497f-b936-733f80bed490" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,3321ced9-d024-497f-b936-733f80bed490.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>miscellaneous</category>
      <category>MVP</category>
      <category>personal</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=29c95c25-3629-4aca-bcc8-59e5276cf54d</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,29c95c25-3629-4aca-bcc8-59e5276cf54d.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,29c95c25-3629-4aca-bcc8-59e5276cf54d.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=29c95c25-3629-4aca-bcc8-59e5276cf54d</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had a couple submissions for ideas to use in today's application, but decided I
would use one of my own. Friday night and all: girlfriends like to go out on Friday
evenings, we need to go shopping, and later we want to watch a little TV together,
so I didn't feel tonight was the best night for a big project.
</p>
        <p>
My idea is a simple yet very useful application for generating random passwords.
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay06Poc_13D2B/image_2.png">
            <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay06Poc_13D2B/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Pocket PasswordGen</strong>
        </p>
        <p>
Nothing too fancy here. It's a good looking application, but it didn't take much to
make it so. Just clean layout and simple design. I did add a horizontal ruler line
between the inputs and the outputs. It is actually two panels set to 1 pixel high
each with ones back color set to light blue and the other pure white. The form's background
is just a little off-white to add some warmth, but it is hard to tell directly.
</p>
        <p>
The application engine is also clean and simple. There is a password class that has
properties for each of the options, and there are two methods: <strong>Generate</strong>,
and <strong>ConvertToPhonetic</strong>.
</p>
        <p>
I have four character groups:
</p>
        <p>
          <em>     static string  lowerCase = @"abcdefghijklmnopqrstuvwyxz";<br />
     static string upperCase = @"ABCDEFGHIJKLMNOPQRSTUVWYXZ";<br />
     static string numbers = @"0123456789";<br />
     static string punctuation = @"~!@#$%^&amp;*()-+='"",.?";</em>
        </p>
        <p>
Based on options the user chooses a character list is created with all possible characters
for the user's password.
</p>
        <p>
Next I <strong>Generate</strong><strong>PasswordLength</strong> worth's of characters
for the password.
</p>
        <p>
This is very important. I use <strong>RNGCryptoServiceProvider</strong> to generate
a random seed number for the random number generator. We want real random numbers,
not wishy-washy random numbers. <a href="http://www.obviex.com/Samples/Password.aspx">This</a> is
a good source for how to use Crypto providers to make a password generator.
</p>
        <p>
Pretty cool code, so check it out if you haven't ever generated <strong>random</strong> numbers
before.
</p>
        <p>
I pulled the <a href="http://en.wikipedia.org/wiki/NATO_phonetic_alphabet">Phonetic
Alphabet</a> off Wikipedia and made it into a generic dictionary object.
</p>
        <p>
Lastly, I added a menu item that allow users to copy the password to their clipboard.
I had to write some code to copy text into the clipboard. <a href="http://www.egilh.com/blog/archive/2005/03/02/575.aspx">This</a> is
the best code I could find for doing so.
</p>
        <p>
BTW, there is a bug in the above screenshot. Fixed in the current release. Can you
see it? It's subtle. It has to do with the handle the last character. Good luck finding
it.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PocketPasswordGenCAB.CAB">passwordGen.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/passwordGen.zip">passwordGen.zip</a></p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
Nothing but positive feedback so far. I really appreciate. It seems we are off to
a good start. Still I have another 24 days left, and only a handful of ideas I really
like. So don't keep that good idea to yourself. One comment on the blog and you might
have yourself your first Windows Mobile custom application.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=29c95c25-3629-4aca-bcc8-59e5276cf54d" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 06: Pocket PasswordGen</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,29c95c25-3629-4aca-bcc8-59e5276cf54d.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/07/30DaysOfNETWindowsMobileApplicationsDay06PocketPasswordGen.aspx</link>
      <pubDate>Sat, 07 Jun 2008 06:35:45 GMT</pubDate>
      <description>&lt;p&gt;
I had a couple submissions for ideas to use in today's application, but decided I
would use one of my own. Friday night and all: girlfriends like to go out on Friday
evenings, we need to go shopping, and later we want to watch a little TV together,
so I didn't feel tonight was the best night for a big project.
&lt;/p&gt;
&lt;p&gt;
My idea is a simple yet very useful application for generating random passwords.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay06Poc_13D2B/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay06Poc_13D2B/image_thumb.png" width="293" align="left" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Pocket PasswordGen&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Nothing too fancy here. It's a good looking application, but it didn't take much to
make it so. Just clean layout and simple design. I did add a horizontal ruler line
between the inputs and the outputs. It is actually two panels set to 1 pixel high
each with ones back color set to light blue and the other pure white. The form's background
is just a little off-white to add some warmth, but it is hard to tell directly.
&lt;/p&gt;
&lt;p&gt;
The application engine is also clean and simple. There is a password class that has
properties for each of the options, and there are two methods: &lt;strong&gt;Generate&lt;/strong&gt;,
and &lt;strong&gt;ConvertToPhonetic&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
I have four character groups:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static string&amp;nbsp; lowerCase = @"abcdefghijklmnopqrstuvwyxz";&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static string upperCase = @"ABCDEFGHIJKLMNOPQRSTUVWYXZ";&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static string numbers = @"0123456789";&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static string punctuation = @"~!@#$%^&amp;amp;*()-+='"",.?";&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Based on options the user chooses a character list is created with all possible characters
for the user's password.
&lt;/p&gt;
&lt;p&gt;
Next I &lt;strong&gt;Generate&lt;/strong&gt; &lt;strong&gt;PasswordLength&lt;/strong&gt; worth's of characters
for the password.
&lt;/p&gt;
&lt;p&gt;
This is very important. I use &lt;strong&gt;RNGCryptoServiceProvider&lt;/strong&gt; to generate
a random seed number for the random number generator. We want real random numbers,
not wishy-washy random numbers. &lt;a href="http://www.obviex.com/Samples/Password.aspx"&gt;This&lt;/a&gt; is
a good source for how to use Crypto providers to make a password generator.
&lt;/p&gt;
&lt;p&gt;
Pretty cool code, so check it out if you haven't ever generated &lt;strong&gt;random&lt;/strong&gt; numbers
before.
&lt;/p&gt;
&lt;p&gt;
I pulled the &lt;a href="http://en.wikipedia.org/wiki/NATO_phonetic_alphabet"&gt;Phonetic
Alphabet&lt;/a&gt; off Wikipedia and made it into a generic dictionary object.
&lt;/p&gt;
&lt;p&gt;
Lastly, I added a menu item that allow users to copy the password to their clipboard.
I had to write some code to copy text into the clipboard. &lt;a href="http://www.egilh.com/blog/archive/2005/03/02/575.aspx"&gt;This&lt;/a&gt; is
the best code I could find for doing so.
&lt;/p&gt;
&lt;p&gt;
BTW, there is a bug in the above screenshot. Fixed in the current release. Can you
see it? It's subtle. It has to do with the handle the last character. Good luck finding
it.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/PocketPasswordGenCAB.CAB"&gt;passwordGen.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/passwordGen.zip"&gt;passwordGen.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Nothing but positive feedback so far. I really appreciate. It seems we are off to
a good start. Still I have another 24 days left, and only a handful of ideas I really
like. So don't keep that good idea to yourself. One comment on the blog and you might
have yourself your first Windows Mobile custom application.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=29c95c25-3629-4aca-bcc8-59e5276cf54d" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,29c95c25-3629-4aca-bcc8-59e5276cf54d.aspx</comments>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>INETA</category>
      <category>miscellaneous</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=e839e70d-5492-4025-98b1-22bbc7e740ef</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,e839e70d-5492-4025-98b1-22bbc7e740ef.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,e839e70d-5492-4025-98b1-22bbc7e740ef.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e839e70d-5492-4025-98b1-22bbc7e740ef</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today was a day I get to pick what I was going to write. One thing I've been doing
a lot of lately is taking screenshot captures of either my emulator or my device.
I don't know if there is a perfect solution for this, but I figured this would be
a great "pain" to try to overcome.
</p>
        <p>
Also, I just think this is a great utility to learn from and to use.
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_2.png">
            <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_thumb.png" width="155" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Mobile Capture</strong>
        </p>
        <p>
As always, let's look at how the application looks. Noticed I had more controls than
I could put on one screen. Or if I could put all the controls on one screen it was
going to look like a train wreck. I really try to make it so that if the user has
to do something "tedious" like data entry, especially on a mobile device, that there
is some sort of "cool" factor for the user to "experience". 
</p>
        <p>
In this case, I decided to make 3 sections to the form and have each fill the screen
in response to the user clicking either the light blue "Capture", "Activation", or
"Option" buttons. Notice how I disguised the buttons to look like section headers. 
</p>
        <p>
With a little effort each section could expand open as a visual effect, I choose to
have the section just instantly pop to their minimized or maximized states. This would
be a great feature enhancement for an enterprising reader to tackle. Just a matter
of fine tuning it.
</p>
        <p>
As far as features go, we have a lot happening there as well. Full Screen mode, Area
mode, Hardware Key support, Time support, and the ability to take multiple pictures
in a row.
</p>
        <p>
That's a lot of application to take on in one day, and really only a couple of hours,
but that's how we do it around here.
</p>
        <p>
One issue I ran into was I managed to confuse myself. I though when I called Form.Hide()
that is wasn't hiding the form's menu bar in time before the screenshot was taken.
So I went and found the following blog article: <a href="http://christian-helle.blogspot.com/2007/06/programmatically-minimize-application.html">Christian
Helle's Blog: Programmatically Minimize an Application in .NET CF 2.0</a>. Work's
fine, but so does Form.Hide() just didn't figure it out for a while. Figured I'd leave <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_4.png"><img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_thumb_1.png" width="155" align="left" border="0" /></a>Christian's
code in for while since it is more interesting, P/Invoke and everything.
</p>
        <p>
I wasn't quite sure the best way to take a screenshot anymore in .NET Compact Framework,
so I looked that up to find a better way. I found this: <a href="http://blog.opennetcf.com/ayakhnin/PermaLink,guid,a5c9adc4-85d6-498e-8adf-0ba5fe9d0db7.aspx">Alex
Yakhnin - Creating a screen snapshot in CF v2</a>. And I decided it would do lovely,
and it has so far. I haven't had the first problem with it.
</p>
        <p>
          <strong>Does anyone recognize where the feature set of this application is based on?</strong> It
is a very famous Windows graphics program that was really popular a few years back
now. Give it a guess.
</p>
        <p>
The .NET Compact Framework HardwareButton device component made working with the device's
hardware buttons a snap.
</p>
        <p>
The way the application figures out what it needs to do between on the various combinations,
and there are a lot of them, is pretty cool to check. Notices I didn't say clean and
slick, just pretty cool. It could use some clean up.
</p>
        <p>
I'm really happy with the UI; it was a simple trick to pull off the effect but I think
it works great. Try it out see what you think! Alright well I think that wraps up
day 05, I hope you like the 
</p>
        <p>
application.
</p>
        <p>
 <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_thumb_2.png" width="155" align="left" border="0" /></p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileCapture.CAB">mobileCapture.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileCapture.zip">mobileCapture.zip</a></p>
        <p>
 
</p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
I'm looking forward to seeing where we go next. I hope you are too. There hasn't been
a lot of comments yet but I know word hasn't really gotten out yet either. But feel
free to post your comments and ideas.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e839e70d-5492-4025-98b1-22bbc7e740ef" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 05: Mobile Capture</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,e839e70d-5492-4025-98b1-22bbc7e740ef.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/06/30DaysOfNETWindowsMobileApplicationsDay05MobileCapture.aspx</link>
      <pubDate>Fri, 06 Jun 2008 07:46:56 GMT</pubDate>
      <description>&lt;p&gt;
Today was a day I get to pick what I was going to write. One thing I've been doing
a lot of lately is taking screenshot captures of either my emulator or my device.
I don't know if there is a perfect solution for this, but I figured this would be
a great "pain" to try to overcome.
&lt;/p&gt;
&lt;p&gt;
Also, I just think this is a great utility to learn from and to use.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_thumb.png" width="155" align="left" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mobile Capture&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
As always, let's look at how the application looks. Noticed I had more controls than
I could put on one screen. Or if I could put all the controls on one screen it was
going to look like a train wreck. I really try to make it so that if the user has
to do something "tedious" like data entry, especially on a mobile device, that there
is some sort of "cool" factor for the user to "experience". 
&lt;/p&gt;
&lt;p&gt;
In this case, I decided to make 3 sections to the form and have each fill the screen
in response to the user clicking either the light blue "Capture", "Activation", or
"Option" buttons. Notice how I disguised the buttons to look like section headers. 
&lt;/p&gt;
&lt;p&gt;
With a little effort each section could expand open as a visual effect, I choose to
have the section just instantly pop to their minimized or maximized states. This would
be a great feature enhancement for an enterprising reader to tackle. Just a matter
of fine tuning it.
&lt;/p&gt;
&lt;p&gt;
As far as features go, we have a lot happening there as well. Full Screen mode, Area
mode, Hardware Key support, Time support, and the ability to take multiple pictures
in a row.
&lt;/p&gt;
&lt;p&gt;
That's a lot of application to take on in one day, and really only a couple of hours,
but that's how we do it around here.
&lt;/p&gt;
&lt;p&gt;
One issue I ran into was I managed to confuse myself. I though when I called Form.Hide()
that is wasn't hiding the form's menu bar in time before the screenshot was taken.
So I went and found the following blog article: &lt;a href="http://christian-helle.blogspot.com/2007/06/programmatically-minimize-application.html"&gt;Christian
Helle's Blog: Programmatically Minimize an Application in .NET CF 2.0&lt;/a&gt;. Work's
fine, but so does Form.Hide() just didn't figure it out for a while. Figured I'd leave &lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_thumb_1.png" width="155" align="left" border="0"&gt;&lt;/a&gt;Christian's
code in for while since it is more interesting, P/Invoke and everything.
&lt;/p&gt;
&lt;p&gt;
I wasn't quite sure the best way to take a screenshot anymore in .NET Compact Framework,
so I looked that up to find a better way. I found this: &lt;a href="http://blog.opennetcf.com/ayakhnin/PermaLink,guid,a5c9adc4-85d6-498e-8adf-0ba5fe9d0db7.aspx"&gt;Alex
Yakhnin - Creating a screen snapshot in CF v2&lt;/a&gt;. And I decided it would do lovely,
and it has so far. I haven't had the first problem with it.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Does anyone recognize where the feature set of this application is based on?&lt;/strong&gt; It
is a very famous Windows graphics program that was really popular a few years back
now. Give it a guess.
&lt;/p&gt;
&lt;p&gt;
The .NET Compact Framework HardwareButton device component made working with the device's
hardware buttons a snap.
&lt;/p&gt;
&lt;p&gt;
The way the application figures out what it needs to do between on the various combinations,
and there are a lot of them, is pretty cool to check. Notices I didn't say clean and
slick, just pretty cool. It could use some clean up.
&lt;/p&gt;
&lt;p&gt;
I'm really happy with the UI; it was a simple trick to pull off the effect but I think
it works great. Try it out see what you think! Alright well I think that wraps up
day 05, I hope you like the 
&lt;/p&gt;
&lt;p&gt;
application.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay05Mob_14D91/image_thumb_2.png" width="155" align="left" border="0"&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileCapture.CAB"&gt;mobileCapture.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MobileCapture.zip"&gt;mobileCapture.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I'm looking forward to seeing where we go next. I hope you are too. There hasn't been
a lot of comments yet but I know word hasn't really gotten out yet either. But feel
free to post your comments and ideas.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=e839e70d-5492-4025-98b1-22bbc7e740ef" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,e839e70d-5492-4025-98b1-22bbc7e740ef.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>personal</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=54b83f72-fdba-48d2-b061-f3c2176cee25</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,54b83f72-fdba-48d2-b061-f3c2176cee25.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,54b83f72-fdba-48d2-b061-f3c2176cee25.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=54b83f72-fdba-48d2-b061-f3c2176cee25</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I wasn't sure what to do for day four. I knew I wouldn't have a ton of time to work
on it so it needed to be something short and sweet. That's when one of my closest
friends, <a href="http://chrisreeder.com/">Chris Reeder</a>, paid me a visit and told
me to take a look at a comment he left for me on my blog. Chris runs a Web site you
may know, <a href="http://stupidprogrammer.com/">StupidProgrammer.com</a>. If not
you should check it out.
</p>
        <blockquote>
          <p>
            <em>I would like to recommend a mileage tracking application using a SQL CE database
(had to get SQL into the app).</em>
          </p>
        </blockquote>
        <p>
I decided this would be a great application for today. Unfortunately I multiple sets
of unexpected visits from friends and family tonight and just about didn't have any
time to sit down and knock this one out. But once I cut some features: SQL CE, metric
support, stats graph, and the ability to compare MPG (etc) over time, it wasn't so
hard. :D
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay04Mil_1347D/image_2.png">
            <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay04Mil_1347D/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Mileage Tracker</strong>
        </p>
        <p>
I think tomorrow I'll do an application of my own choosing, you guys can't have all
the fun. But I'm glad for the participation. Thanks!
</p>
        <p>
First thing to discuss is the design. There is some eye-candy but it is really minimum.
Just a pretty background. Actually it is a background based on Windows Live Messenger's
default theme. Just enough color to not be sterile.
</p>
        <p>
First issue I ran into with this was <strong>transparent labels</strong>. The .NET
Compact Framework for some reason does not support these. You can set it to transparent
it just isn't implement and it doesn't do anything. The way I got around this was
to following this guide: <a href="http://blog.opennetcf.com/ayakhnin/PermaLink,guid,34221459-8db8-41ef-91c7-5514eade8fca.aspx">Alex
Yakhnin - Transparent labels</a>. (There's a minor typo: the Graphics grx object that
is passed into the method is called gxOff inside the method. Just correct that and
everything works great.) Very nice work-around Alex.
</p>
        <p>
Not to the technical design: I had to decide what calculations I was going to support.
I decided I wanted to do the following:
</p>
        <ol>
          <li>
            <strong>Miles Per Gallon</strong>: required I know total distance and total fuel used.
(standard mpg value)</li>
        </ol>
        <p>
          <strong>Gallons Per 100 Miles</strong>: no new information needed. (How many gallons
does it take to make it 100 miles.)
</p>
        <p>
          <strong>Cost Per 100 Miles</strong>: I would have to also get price per gallon. (How
much does it cost to travel 100 miles.)
</p>
        <p>
          <strong>Maximum Range</strong>: I would need the user to provide total gallons tank
can hold. (How far could I travel on a full tank of gas.)
</p>
        <p>
The menu has <strong>Clear</strong>, <strong>About</strong>, and <strong>Exit</strong> menu
items that are all basically self explanatory.
</p>
        <p>
I decided to break out the fields and calculations into a separate class called <strong>Mileage</strong>. 
</p>
        <blockquote>
          <p>
I almost forgot to make a custom icon for this application. I would have hated that.
I really dislike the default icon and try to always replace it.
</p>
          <p>
Once again we take advantage of the custom string formatter in the .NET Compact Framework.
By using <strong>.ToString("0.00")</strong> we always get numbers to two decimal places,
versus huge unwieldy and unsightly values.
</p>
          <p>
Like I said, "short and sweet". I hope you like it.
</p>
        </blockquote>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MileageTracker.CAB">mileageTracker.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MileageTracker.zip">milesageTracker.zip</a></p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
So I think we are off to a great start. Today request is for reader to help spread
the word and let others know about this resource. These are meant to be great resources
for training and proof of the rapid application development power of .NET Compact
Framework and Windows Mobile. So if you are enjoying this series and know someone
else who might maybe you should let them know about us?
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=54b83f72-fdba-48d2-b061-f3c2176cee25" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 04: Mileage Tracker</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,54b83f72-fdba-48d2-b061-f3c2176cee25.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/05/30DaysOfNETWindowsMobileApplicationsDay04MileageTracker.aspx</link>
      <pubDate>Thu, 05 Jun 2008 06:02:29 GMT</pubDate>
      <description>&lt;p&gt;
I wasn't sure what to do for day four. I knew I wouldn't have a ton of time to work
on it so it needed to be something short and sweet. That's when one of my closest
friends, &lt;a href="http://chrisreeder.com/"&gt;Chris Reeder&lt;/a&gt;, paid me a visit and told
me to take a look at a comment he left for me on my blog. Chris runs a Web site you
may know, &lt;a href="http://stupidprogrammer.com/"&gt;StupidProgrammer.com&lt;/a&gt;. If not
you should check it out.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;I would like to recommend a mileage tracking application using a SQL CE database
(had to get SQL into the app).&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I decided this would be a great application for today. Unfortunately I multiple sets
of unexpected visits from friends and family tonight and just about didn't have any
time to sit down and knock this one out. But once I cut some features: SQL CE, metric
support, stats graph, and the ability to compare MPG (etc) over time, it wasn't so
hard. :D
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay04Mil_1347D/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay04Mil_1347D/image_thumb.png" width="293" align="left" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Mileage Tracker&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I think tomorrow I'll do an application of my own choosing, you guys can't have all
the fun. But I'm glad for the participation. Thanks!
&lt;/p&gt;
&lt;p&gt;
First thing to discuss is the design. There is some eye-candy but it is really minimum.
Just a pretty background. Actually it is a background based on Windows Live Messenger's
default theme. Just enough color to not be sterile.
&lt;/p&gt;
&lt;p&gt;
First issue I ran into with this was &lt;strong&gt;transparent labels&lt;/strong&gt;. The .NET
Compact Framework for some reason does not support these. You can set it to transparent
it just isn't implement and it doesn't do anything. The way I got around this was
to following this guide: &lt;a href="http://blog.opennetcf.com/ayakhnin/PermaLink,guid,34221459-8db8-41ef-91c7-5514eade8fca.aspx"&gt;Alex
Yakhnin - Transparent labels&lt;/a&gt;. (There's a minor typo: the Graphics grx object that
is passed into the method is called gxOff inside the method. Just correct that and
everything works great.) Very nice work-around Alex.
&lt;/p&gt;
&lt;p&gt;
Not to the technical design: I had to decide what calculations I was going to support.
I decided I wanted to do the following:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Miles Per Gallon&lt;/strong&gt;: required I know total distance and total fuel used.
(standard mpg value)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;Gallons Per 100 Miles&lt;/strong&gt;: no new information needed. (How many gallons
does it take to make it 100 miles.)
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Cost Per 100 Miles&lt;/strong&gt;: I would have to also get price per gallon. (How
much does it cost to travel 100 miles.)
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Maximum Range&lt;/strong&gt;: I would need the user to provide total gallons tank
can hold. (How far could I travel on a full tank of gas.)
&lt;/p&gt;
&lt;p&gt;
The menu has &lt;strong&gt;Clear&lt;/strong&gt;, &lt;strong&gt;About&lt;/strong&gt;, and &lt;strong&gt;Exit&lt;/strong&gt; menu
items that are all basically self explanatory.
&lt;/p&gt;
&lt;p&gt;
I decided to break out the fields and calculations into a separate class called &lt;strong&gt;Mileage&lt;/strong&gt;. 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
I almost forgot to make a custom icon for this application. I would have hated that.
I really dislike the default icon and try to always replace it.
&lt;/p&gt;
&lt;p&gt;
Once again we take advantage of the custom string formatter in the .NET Compact Framework.
By using &lt;strong&gt;.ToString("0.00")&lt;/strong&gt; we always get numbers to two decimal places,
versus huge unwieldy and unsightly values.
&lt;/p&gt;
&lt;p&gt;
Like I said, "short and sweet". I hope you like it.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MileageTracker.CAB"&gt;mileageTracker.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/MileageTracker.zip"&gt;milesageTracker.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
So I think we are off to a great start. Today request is for reader to help spread
the word and let others know about this resource. These are meant to be great resources
for training and proof of the rapid application development power of .NET Compact
Framework and Windows Mobile. So if you are enjoying this series and know someone
else who might maybe you should let them know about us?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=54b83f72-fdba-48d2-b061-f3c2176cee25" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,54b83f72-fdba-48d2-b061-f3c2176cee25.aspx</comments>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=ec8761dd-a8df-40b2-a1b7-4d38600a658d</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,ec8761dd-a8df-40b2-a1b7-4d38600a658d.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,ec8761dd-a8df-40b2-a1b7-4d38600a658d.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ec8761dd-a8df-40b2-a1b7-4d38600a658d</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For day three, I  had already decided to write a GPS Compass application, short
and sweet. It just so happens I received a comment from Paul Diston today (see below)
asking for that very thing. It's a small world.
</p>
        <blockquote>
          <h1>
          </h1>
          <h6>
          </h6>
          <h5>
            <em>Hi,</em>
          </h5>
          <h5>
            <em>I may have an idea that you might be interested in. I have a GPS receiver
in my device and use the GPS Sample as provided with the Windows Mobile 5 SDK. I would
be interested in a 'snail trail' kind of application which would draw your current
location and keep track of your movements, a simple line showing your movements would
be great. <strong>Also maybe a compass type application which would calculate your
bearing.</strong></em>
          </h5>
          <h5>
            <em>I have had some success with these ideas however I just don't get the time
to explore them further.</em>
          </h5>
          <h5>
            <em>Thanks</em>
          </h5>
          <h5>
            <em>Paul Diston</em>
          </h5>
        </blockquote>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay03GPS_13428/image_2.png">
            <img style="margin: 5px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay03GPS_13428/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>GPS Compass</strong>
        </p>
        <p>
Again we have another 30 Days of .NET application that was at least in part due to
a reader's request. So keep them coming gang.
</p>
        <p>
I'm not a graphics designer, but as I've mentioned before I believe it is important
for a program to have some eye candy. It needs to look good and professional. Now
beauty is in the eye of the beholder and you may be thinking GPS Compass is ugly,
but the point is I tried, and IMHO I think it looks decent.
</p>
        <p>
Now did I draw the compass rose you see to the right? <strong>No</strong>. I went
to Wikipedia and found one in the public domain <a href="http://commons.wikimedia.org/wiki/Compass_rose">here</a>.
But that's my point it is important to make best use of <strong>all</strong> the resources
you have at hand. Notice I didn't spend hours trying to do it myself only to end up
with a nonprofessional looking graphic.
</p>
        <p>
Once I had the base I need for the aesthetic design of GPS Compass, it was time to
decide how to design the GPS engine. I narrowed the possibilities down to the following:
access the GPS as a <a href="http://msdn.microsoft.com/en-us/library/aa446565.aspx">serial
device</a>, use the <a href="http://blogs.msdn.com/mikehall/archive/2005/03/31/404302.aspx">OpenNETCF
GPS Library</a>, or use the <a href="http://msdn.microsoft.com/en-us/library/ms850332.aspx">GPS
Intermediate Driver</a>.
</p>
        <p>
I decided to use the GPS Intermediate Driver since it is fairly new, and it as the
documentation says, <strong>"It is useful because it provides an intermediate layer
that abstracts the actual GPS device from developers and manufacturers."</strong></p>
        <p>
One thing about hardware nobody builds anything the same way. There are <strong>always</strong> like
quirks and variations. If somebody else volunteers to let that be there problem you'd
be wise to take them up on the offer.
</p>
        <p>
Next I needed a way to test the application. I have an AT&amp;T Tilt, that I love,
and it does have built-in GPS but it isn't going to work from almost the dead center
of my house. Fortunately Microsoft loves their developers and have included a <a href="http://msdn.microsoft.com/en-us/library/bb158722.aspx">Fake
GPS</a> utility for this very purpose. "FakeGPS uses text files containing GPS data
to simulate the functionality of a GPS receiver." I really like this tool it just
works.
</p>
        <p>
I read through the GPS Intermediate Driver reference material and found the object
I was interested in: <a href="http://msdn.microsoft.com/en-us/library/ms893674.aspx">GPS_POSITION</a>.
For this simple application all I really needed was access to <strong>flHeading</strong>:
Heading, in degrees. A heading of zero is true north.
</p>
        <p>
At this point I discovered that the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=06111A3A-A651-4745-88EF-3D48091A390B">Windows
Mobile 6 SDK</a> included a <a href="http://msdn.microsoft.com/en-us/library/bb158699.aspx">GPS
Application</a> in the samples folder, <strong>C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS</strong>.
</p>
        <p>
I checked it out and realized it would be a snap for me to take the sample and convert
it over to what I needed. Sure I could have duplicated the effort, but everything
I needed was right there waiting for me to take advantage of it. Again, <strong>always</strong> remember
to make the best use of <strong>all</strong> the resources you have available.
</p>
        <p>
The GPS Application has a nice status screen which I moved to a menu item option.
I mean the main event here is obviously the sexy screen you see above. A few nips
here, and a few tucks there, and I was done.
</p>
        <p>
One thing to be aware of is the sample, and the GPS Application it stands on top of
are great base applications to build almost any GPS application you can think of.
</p>
        <p>
There is nothing stopping any of you from taking this and creating your own .NET Application
of the Day. And if you do let me know and I'll mention your application.
</p>
        <p>
Download executable: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GpsCompass.cab">gpsCompass.cab</a></p>
        <p>
Download Source Code: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GPSCompass.zip">gpsCompass.zip</a></p>
        <p>
Feedback
</p>
        <p>
We only have 27 days left for you to submit your idea, or even your .NET [Windows
Mobile] Application of the day.
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 03: GPS Compass</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,ec8761dd-a8df-40b2-a1b7-4d38600a658d.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/04/30DaysOfNETWindowsMobileApplicationsDay03GPSCompass.aspx</link>
      <pubDate>Wed, 04 Jun 2008 05:06:44 GMT</pubDate>
      <description>&lt;p&gt;
For day three, I&amp;nbsp; had already decided to write a GPS Compass application, short
and sweet. It just so happens I received a comment from Paul Diston today (see below)
asking for that very thing. It's a small world.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;h1&gt;
&lt;/h1&gt;
&lt;h6&gt;
&lt;/h6&gt;
&lt;h5&gt;&lt;em&gt;Hi,&lt;/em&gt;
&lt;/h5&gt;
&lt;h5&gt;&lt;em&gt;I may have an idea that you might be interested in. I have a GPS receiver
in my device and use the GPS Sample as provided with the Windows Mobile 5 SDK. I would
be interested in a 'snail trail' kind of application which would draw your current
location and keep track of your movements, a simple line showing your movements would
be great. &lt;strong&gt;Also maybe a compass type application which would calculate your
bearing.&lt;/strong&gt;&lt;/em&gt;
&lt;/h5&gt;
&lt;h5&gt;&lt;em&gt;I have had some success with these ideas however I just don't get the time
to explore them further.&lt;/em&gt;
&lt;/h5&gt;
&lt;h5&gt;&lt;em&gt;Thanks&lt;/em&gt;
&lt;/h5&gt;
&lt;h5&gt;&lt;em&gt;Paul Diston&lt;/em&gt;
&lt;/h5&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay03GPS_13428/image_2.png"&gt;&lt;img style="margin: 5px" height="454" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay03GPS_13428/image_thumb.png" width="293" align="left" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;GPS Compass&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Again we have another 30 Days of .NET application that was at least in part due to
a reader's request. So keep them coming gang.
&lt;/p&gt;
&lt;p&gt;
I'm not a graphics designer, but as I've mentioned before I believe it is important
for a program to have some eye candy. It needs to look good and professional. Now
beauty is in the eye of the beholder and you may be thinking GPS Compass is ugly,
but the point is I tried, and IMHO I think it looks decent.
&lt;/p&gt;
&lt;p&gt;
Now did I draw the compass rose you see to the right? &lt;strong&gt;No&lt;/strong&gt;. I went
to Wikipedia and found one in the public domain &lt;a href="http://commons.wikimedia.org/wiki/Compass_rose"&gt;here&lt;/a&gt;.
But that's my point it is important to make best use of &lt;strong&gt;all&lt;/strong&gt; the resources
you have at hand. Notice I didn't spend hours trying to do it myself only to end up
with a nonprofessional looking graphic.
&lt;/p&gt;
&lt;p&gt;
Once I had the base I need for the aesthetic design of GPS Compass, it was time to
decide how to design the GPS engine. I narrowed the possibilities down to the following:
access the GPS as a &lt;a href="http://msdn.microsoft.com/en-us/library/aa446565.aspx"&gt;serial
device&lt;/a&gt;, use the &lt;a href="http://blogs.msdn.com/mikehall/archive/2005/03/31/404302.aspx"&gt;OpenNETCF
GPS Library&lt;/a&gt;, or use the &lt;a href="http://msdn.microsoft.com/en-us/library/ms850332.aspx"&gt;GPS
Intermediate Driver&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I decided to use the GPS Intermediate Driver since it is fairly new, and it as the
documentation says, &lt;strong&gt;"It is useful because it provides an intermediate layer
that abstracts the actual GPS device from developers and manufacturers."&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
One thing about hardware nobody builds anything the same way. There are &lt;strong&gt;always&lt;/strong&gt; like
quirks and variations. If somebody else volunteers to let that be there problem you'd
be wise to take them up on the offer.
&lt;/p&gt;
&lt;p&gt;
Next I needed a way to test the application. I have an AT&amp;amp;T Tilt, that I love,
and it does have built-in GPS but it isn't going to work from almost the dead center
of my house. Fortunately Microsoft loves their developers and have included a &lt;a href="http://msdn.microsoft.com/en-us/library/bb158722.aspx"&gt;Fake
GPS&lt;/a&gt; utility for this very purpose. "FakeGPS uses text files containing GPS data
to simulate the functionality of a GPS receiver." I really like this tool it just
works.
&lt;/p&gt;
&lt;p&gt;
I read through the GPS Intermediate Driver reference material and found the object
I was interested in: &lt;a href="http://msdn.microsoft.com/en-us/library/ms893674.aspx"&gt;GPS_POSITION&lt;/a&gt;.
For this simple application all I really needed was access to &lt;strong&gt;flHeading&lt;/strong&gt;:
Heading, in degrees. A heading of zero is true north.
&lt;/p&gt;
&lt;p&gt;
At this point I discovered that the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=06111A3A-A651-4745-88EF-3D48091A390B"&gt;Windows
Mobile 6 SDK&lt;/a&gt; included a &lt;a href="http://msdn.microsoft.com/en-us/library/bb158699.aspx"&gt;GPS
Application&lt;/a&gt; in the samples folder, &lt;strong&gt;C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
I checked it out and realized it would be a snap for me to take the sample and convert
it over to what I needed. Sure I could have duplicated the effort, but everything
I needed was right there waiting for me to take advantage of it. Again, &lt;strong&gt;always&lt;/strong&gt; remember
to make the best use of &lt;strong&gt;all&lt;/strong&gt; the resources you have available.
&lt;/p&gt;
&lt;p&gt;
The GPS Application has a nice status screen which I moved to a menu item option.
I mean the main event here is obviously the sexy screen you see above. A few nips
here, and a few tucks there, and I was done.
&lt;/p&gt;
&lt;p&gt;
One thing to be aware of is the sample, and the GPS Application it stands on top of
are great base applications to build almost any GPS application you can think of.
&lt;/p&gt;
&lt;p&gt;
There is nothing stopping any of you from taking this and creating your own .NET Application
of the Day. And if you do let me know and I'll mention your application.
&lt;/p&gt;
&lt;p&gt;
Download executable: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GpsCompass.cab"&gt;gpsCompass.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Download Source Code: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/GPSCompass.zip"&gt;gpsCompass.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Feedback
&lt;/p&gt;
&lt;p&gt;
We only have 27 days left for you to submit your idea, or even your .NET [Windows
Mobile] Application of the day.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=ec8761dd-a8df-40b2-a1b7-4d38600a658d" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,ec8761dd-a8df-40b2-a1b7-4d38600a658d.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=c918c6ab-c414-464f-bd55-37d1aecd806b</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,c918c6ab-c414-464f-bd55-37d1aecd806b.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,c918c6ab-c414-464f-bd55-37d1aecd806b.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c918c6ab-c414-464f-bd55-37d1aecd806b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Daysof.NETWelcomesits.NETEditorLouVega_6463/image_2.png">
            <img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="125" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Daysof.NETWelcomesits.NETEditorLouVega_6463/image_thumb.png" width="413" align="right" border="0" />
          </a>
          <a href="http://geekswithblogs.net/lvega/Default.aspx">Lou
Vega</a>, leader of the <a href="http://www.gcnug.org/">Charleston, SC .NET User's
Group</a>, asked me if he could be the VB .NET Editor for 30 Days of .NET. Again my
goal is to make this as much of an open forum as possible. Since its hard to do that
with one person, and Lou totally rocks, I said of course, thank you!
</p>
        <p>
Basically Lou is going to take up the task of converting each of the applications
to VB .NET. This is a <strong>huge</strong> boon for the community. If you are a VB
.NET programmer and you want to do Windows Mobile development you will quickly discover
that only something like 1 in 10 examples are done in VB .NET, if that many. And outside
of Microsoft almost all content is done in C#.
</p>
        <p>
I understand the decision Microsoft made. Basically most Windows Mobile developers,
at least in the early days, had a background in C++ and usually Win32 programming.
Microsoft wanted to cater to these developers, and win them over for the success of
the platform. Also, with a new platform guidance is very important. If there was a
budget for 10 tutorials that year, then if they were split between C# and VB .NET,
there would only be about half as many such examples. 
</p>
        <p>
The choice was made to make more examples that could help beginner developers all
the way to advance developers, versus having to cut out a lot of material. And trust
me in the early days you needed as much help as possible because if you were doing
any out of the norm it could be just a little rough. Today things are so much better,
if you want to do something it is usually simple and direct.
</p>
        <p>
So with that out of the way let me officially welcome Lou Vega into his new position,
and offer him my sincerest thanks. Great idea Lou!
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=c918c6ab-c414-464f-bd55-37d1aecd806b" />
      </body>
      <title>30 Days of .NET Welcomes its new VB .NET Editor: Lou Vega</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,c918c6ab-c414-464f-bd55-37d1aecd806b.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/03/30DaysOfNETWelcomesItsNewVBNETEditorLouVega.aspx</link>
      <pubDate>Tue, 03 Jun 2008 08:00:47 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Daysof.NETWelcomesits.NETEditorLouVega_6463/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="125" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30Daysof.NETWelcomesits.NETEditorLouVega_6463/image_thumb.png" width="413" align="right" border="0"&gt;&lt;/a&gt; &lt;a href="http://geekswithblogs.net/lvega/Default.aspx"&gt;Lou
Vega&lt;/a&gt;, leader of the &lt;a href="http://www.gcnug.org/"&gt;Charleston, SC .NET User's
Group&lt;/a&gt;, asked me if he could be the VB .NET Editor for 30 Days of .NET. Again my
goal is to make this as much of an open forum as possible. Since its hard to do that
with one person, and Lou totally rocks, I said of course, thank you!
&lt;/p&gt;
&lt;p&gt;
Basically Lou is going to take up the task of converting each of the applications
to VB .NET. This is a &lt;strong&gt;huge&lt;/strong&gt; boon for the community. If you are a VB
.NET programmer and you want to do Windows Mobile development you will quickly discover
that only something like 1 in 10 examples are done in VB .NET, if that many. And outside
of Microsoft almost all content is done in C#.
&lt;/p&gt;
&lt;p&gt;
I understand the decision Microsoft made. Basically most Windows Mobile developers,
at least in the early days, had a background in C++ and usually Win32 programming.
Microsoft wanted to cater to these developers, and win them over for the success of
the platform. Also, with a new platform guidance is very important. If there was a
budget for 10 tutorials that year, then if they were split between C# and VB .NET,
there would only be about half as many such examples. 
&lt;/p&gt;
&lt;p&gt;
The choice was made to make more examples that could help beginner developers all
the way to advance developers, versus having to cut out a lot of material. And trust
me in the early days you needed as much help as possible because if you were doing
any out of the norm it could be just a little rough. Today things are so much better,
if you want to do something it is usually simple and direct.
&lt;/p&gt;
&lt;p&gt;
So with that out of the way let me officially welcome Lou Vega into his new position,
and offer him my sincerest thanks. Great idea Lou!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=c918c6ab-c414-464f-bd55-37d1aecd806b" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,c918c6ab-c414-464f-bd55-37d1aecd806b.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=0fdc8641-1d15-42a8-9908-64b20f5ac98d</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,0fdc8641-1d15-42a8-9908-64b20f5ac98d.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,0fdc8641-1d15-42a8-9908-64b20f5ac98d.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0fdc8641-1d15-42a8-9908-64b20f5ac98d</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, <a href="http://pagebrooks.com/">Page Brooks</a> was <a href="http://www.cjcraft.com/blog/CommentView,guid,7b384735-c541-4952-ae82-8fe2dc1d28d1.aspx#commentstart">telling</a> to
me about a limitation with his Windows Mobile device. His device's battery isn't powerful
enough for him to be able to leave his <a href="http://www.bluetooth.com/">Bluetooth</a> radio
on all day. But he really wants to be able to use his Bluetooth headset while he is
driving to work in the morning, and on the way back home in the afternoon. One requirement
he has is he doesn't want to have to look at the screen to accomplish this.
</p>
        <p>
It would have been real easy to create a Bluetooth Toggle application that simply
takes the current state of the Bluetooth radio and toggles it from on to off, and
vice versa. Instead, I've decided to build a simple Bluetooth Manager application
that will provide our readers with the code needed to create the Bluetooth Toggle
application. My hope is that someone from the community will take this code and help
Page out.
</p>
        <p>
Technically I make some special "modifications" to the application that should help
Page get by for the time being. When the application first starts, it toggles the
Bluetooth radio mode. And I added a timer that will begin an auto shutdown after the
program has been running for 1 minute. All Page needs to do is assign the application
to a spare hardware key and then when he press that key it will toggle the Bluetooth
radio on and off, and after 1 minute it will auto shutdown.
</p>
        <p>
So according to <a href="http://www.cjcraft.com/blog/2008/06/02/30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx">Minutes
to Midnight</a> I have 2 hours, 21 minutes, and 6 seconds left to make today's application.
So let's get on with the show.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay02Blu_1269B/image_2.png">
            <img style="margin: 5px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay02Blu_1269B/image_thumb.png" width="293" align="left" border="0" />
          </a>
        </p>
        <p>
          <strong>Bluetooth Manager</strong>
        </p>
        <p>
This application came about due to a reader's request. So be sure to submit your ideas
for applications. I strongly favor working on user submitted ideas over my own.
</p>
        <p>
I always like an application to have a little eye candy, and that explains the interactive
Bluetooth logo at the top of the screen. It is in color when the Bluetooth is enabled,
and grayscale when Bluetooth is off. Clicking the Bluetooth logo toggles the Bluetooth
radio from on to off. 
</p>
        <p>
I added a multiline textbox so users could see a history of Bluetooth radio state
changes. There are buttons to allow users to directly turn the Bluetooth radio on
and off.
</p>
        <p>
One caveat is that this uses <a href="http://msdn.microsoft.com/en-us/library/aa446536.aspx">P/Invoke</a> to <a href="http://msdn.microsoft.com/en-us/library/aa455170.aspx">access</a> the
Microsoft Bluetooth stack dlls.
</p>
        <p>
Here are the calls:
</p>
        <p>
   [DllImport("BthUtil.dll")]<br />
   private static extern int BthGetMode(out RadioMode dwMode); 
</p>
        <p>
   [DllImport("BthUtil.dll")]<br />
   private static extern int BthSetMode(RadioMode dwMode);
</p>
        <p>
Also, we had to take advantage of <a href="http://www.developer.com/ws/pc/article.php/3547381">State
and Notification Broker API</a>. Here's why: if the state of the Bluetooth radio were
to change due to an action outside of our program we wouldn't know about it. That's
where SNB API comes in. It allows us to subscribe to notifications for almost any
event that we are interested in. The code is below.
</p>
        <p>
          <font color="#c0c0c0">
            <strong> </strong>  </font>
          <font color="#000000">SystemState
bluetoothStatePowerOn = new SystemState(SystemProperty.BluetoothStatePowerOn);<br />
   bluetoothStatePowerOn.Changed += new ChangeEventHandler(bluetoothStatePowerOn_Changed);</font>
        </p>
        <p>
   void bluetoothStatePowerOn_Changed(object sender, ChangeEventArgs args)<br />
   {<br />
       UpdateScreen();<br />
   }
</p>
        <p>
          <strong>
          </strong> 
</p>
        <p>
The last thing to check out is the auto shutdown code: it's simple but works great.
There is a timer that waits for 1 minute to pass, and then there is a loop for the
count of ten, which uses a Thread.Sleep(1000) to pause the application for 1 second
each iteration of the loop. This creates a great effect that keeps the user from thinking
the application has crashed.
</p>
        <p>
          <strong>Download executable</strong>: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/BluetoothManager.cab">bluetoothManager.cab</a></p>
        <p>
          <strong>Download Source Code</strong>: <a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/BluetoothManager.zip">bluetoothManager.zip</a></p>
        <p>
          <strong>[Be sure to check out the </strong>
          <a href="http://www.christec.co.nz/blog/archives/353">
            <strong>C++
Edition</strong>
          </a>
          <strong> of 30 Days of Windows Mobile Applications] </strong>
        </p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
28 days left to go, and so far we had one idea submitted for an application. Keep
them coming. So what do you guys think? Is the format working for you? Any ideas on
what we can improve?
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay02Blu_1269B/image_2.png">
          </a>
        </p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=0fdc8641-1d15-42a8-9908-64b20f5ac98d" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications] - Day 02: Bluetooth Manager</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,0fdc8641-1d15-42a8-9908-64b20f5ac98d.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/03/30DaysOfNETWindowsMobileApplicationsDay02BluetoothManager.aspx</link>
      <pubDate>Tue, 03 Jun 2008 06:01:13 GMT</pubDate>
      <description>&lt;p&gt;
Today, &lt;a href="http://pagebrooks.com/"&gt;Page Brooks&lt;/a&gt; was &lt;a href="http://www.cjcraft.com/blog/CommentView,guid,7b384735-c541-4952-ae82-8fe2dc1d28d1.aspx#commentstart"&gt;telling&lt;/a&gt; to
me about a limitation with his Windows Mobile device. His device's battery isn't powerful
enough for him to be able to leave his &lt;a href="http://www.bluetooth.com/"&gt;Bluetooth&lt;/a&gt; radio
on all day. But he really wants to be able to use his Bluetooth headset while he is
driving to work in the morning, and on the way back home in the afternoon. One requirement
he has is he doesn't want to have to look at the screen to accomplish this.
&lt;/p&gt;
&lt;p&gt;
It would have been real easy to create a Bluetooth Toggle application that simply
takes the current state of the Bluetooth radio and toggles it from on to off, and
vice versa. Instead, I've decided to build a simple Bluetooth Manager application
that will provide our readers with the code needed to create the Bluetooth Toggle
application. My hope is that someone from the community will take this code and help
Page out.
&lt;/p&gt;
&lt;p&gt;
Technically I make some special "modifications" to the application that should help
Page get by for the time being. When the application first starts, it toggles the
Bluetooth radio mode. And I added a timer that will begin an auto shutdown after the
program has been running for 1 minute. All Page needs to do is assign the application
to a spare hardware key and then when he press that key it will toggle the Bluetooth
radio on and off, and after 1 minute it will auto shutdown.
&lt;/p&gt;
&lt;p&gt;
So according to &lt;a href="http://www.cjcraft.com/blog/2008/06/02/30DaysOfNETWindowsMobileApplicationsDay01MinutesToMidnightCountdown.aspx"&gt;Minutes
to Midnight&lt;/a&gt; I have 2 hours, 21 minutes, and 6 seconds left to make today's application.
So let's get on with the show.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay02Blu_1269B/image_2.png"&gt;&lt;img style="margin: 5px" height="455" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay02Blu_1269B/image_thumb.png" width="293" align="left" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Bluetooth Manager&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This application came about due to a reader's request. So be sure to submit your ideas
for applications. I strongly favor working on user submitted ideas over my own.
&lt;/p&gt;
&lt;p&gt;
I always like an application to have a little eye candy, and that explains the interactive
Bluetooth logo at the top of the screen. It is in color when the Bluetooth is enabled,
and grayscale when Bluetooth is off. Clicking the Bluetooth logo toggles the Bluetooth
radio from on to off. 
&lt;/p&gt;
&lt;p&gt;
I added a multiline textbox so users could see a history of Bluetooth radio state
changes. There are buttons to allow users to directly turn the Bluetooth radio on
and off.
&lt;/p&gt;
&lt;p&gt;
One caveat is that this uses &lt;a href="http://msdn.microsoft.com/en-us/library/aa446536.aspx"&gt;P/Invoke&lt;/a&gt; to &lt;a href="http://msdn.microsoft.com/en-us/library/aa455170.aspx"&gt;access&lt;/a&gt; the
Microsoft Bluetooth stack dlls.
&lt;/p&gt;
&lt;p&gt;
Here are the calls:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp; [DllImport("BthUtil.dll")]&lt;br&gt;
&amp;nbsp;&amp;nbsp; private static extern int BthGetMode(out RadioMode dwMode); 
&lt;p&gt;
&amp;nbsp;&amp;nbsp; [DllImport("BthUtil.dll")]&lt;br&gt;
&amp;nbsp;&amp;nbsp; private static extern int BthSetMode(RadioMode dwMode);
&lt;/p&gt;
&lt;p&gt;
Also, we had to take advantage of &lt;a href="http://www.developer.com/ws/pc/article.php/3547381"&gt;State
and Notification Broker API&lt;/a&gt;. Here's why: if the state of the Bluetooth radio were
to change due to an action outside of our program we wouldn't know about it. That's
where SNB API comes in. It allows us to subscribe to notifications for almost any
event that we are interested in. The code is below.
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#c0c0c0"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&amp;nbsp; &lt;/font&gt;&lt;font color="#000000"&gt;SystemState
bluetoothStatePowerOn = new SystemState(SystemProperty.BluetoothStatePowerOn);&lt;br&gt;
&amp;nbsp;&amp;nbsp; bluetoothStatePowerOn.Changed += new ChangeEventHandler(bluetoothStatePowerOn_Changed);&lt;/font&gt; 
&lt;p&gt;
&amp;nbsp;&amp;nbsp; void bluetoothStatePowerOn_Changed(object sender, ChangeEventArgs args)&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateScreen();&lt;br&gt;
&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The last thing to check out is the auto shutdown code: it's simple but works great.
There is a timer that waits for 1 minute to pass, and then there is a loop for the
count of ten, which uses a Thread.Sleep(1000) to pause the application for 1 second
each iteration of the loop. This creates a great effect that keeps the user from thinking
the application has crashed.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Download executable&lt;/strong&gt;: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/BluetoothManager.cab"&gt;bluetoothManager.cab&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Download Source Code&lt;/strong&gt;: &lt;a href="http://cid-0779b8ef58de4561.skydrive.live.com/self.aspx/Public/BluetoothManager.zip"&gt;bluetoothManager.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[Be sure to check out the &lt;/strong&gt;&lt;a href="http://www.christec.co.nz/blog/archives/353"&gt;&lt;strong&gt;C++
Edition&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; of 30 Days of Windows Mobile Applications] &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
28 days left to go, and so far we had one idea submitted for an application. Keep
them coming. So what do you guys think? Is the format working for you? Any ideas on
what we can improve?
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay02Blu_1269B/image_2.png"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=0fdc8641-1d15-42a8-9908-64b20f5ac98d" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,0fdc8641-1d15-42a8-9908-64b20f5ac98d.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>smartphone</category>
      <category>windows mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.cjcraft.com/blog/Trackback.aspx?guid=3e97d7a6-4f22-4709-9dd6-6553d148e341</trackback:ping>
      <pingback:server>http://www.cjcraft.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.cjcraft.com/blog/PermaLink,guid,3e97d7a6-4f22-4709-9dd6-6553d148e341.aspx</pingback:target>
      <dc:creator>Chris Craft</dc:creator>
      <wfw:comment>http://www.cjcraft.com/blog/CommentView,guid,3e97d7a6-4f22-4709-9dd6-6553d148e341.aspx</wfw:comment>
      <wfw:commentRss>http://www.cjcraft.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3e97d7a6-4f22-4709-9dd6-6553d148e341</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay01Min_F63E/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="254" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay01Min_F63E/image_thumb.png" width="190" align="right" border="0" />
          </a> Over
the years, I have given many presentations on developing Windows Mobile applications.
One thing that I have heard time and time again is that people have a hard time writing
their first mobile application. I think sometimes people have a hard time taking those
first steps. It is easy to think that it will take too much time, and that it will
be too hard. But that is simply not the case.
</p>
        <p>
But instead of telling people, I'm going to show them how easy it really is. The key
here is simple: <strong>"Taking baby steps is better than taking no steps at all!"</strong></p>
        <p>
I plan on writing 30 mobile applications in the next 30 days. I will publish both
the executable and the source code for each application.
</p>
        <p>
My goal is for each of these applications to be useful, interesting, and straight-forward.
Someone considering writing their first Windows Mobile application should be able
to look at these applications and "get it". 
</p>
        <p>
If you search, you can find tons of simple code to do specific tasks, like playing
a message beep. You can even search and find code for fully developed applications,
but these are too advanced for many developers, first starting out. What you'll have
a harder time finding are simple applications, with source code, that can be the building
blocks for new developer's understanding of mobile development. It's my hope that
in the next 30 days I can do something to help with that.
</p>
        <p>
          <strong>Feedback</strong>
        </p>
        <p>
Please consider this entire series an open forum. I'd love to hear what you think,
and what you want. Do you think this will help new mobile developers? Are you a new
to mobile development? If so, what would most help you "get it"?
</p>
        <img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=3e97d7a6-4f22-4709-9dd6-6553d148e341" />
      </body>
      <title>30 Days of .NET [Windows Mobile Applications]</title>
      <guid isPermaLink="false">http://www.cjcraft.com/blog/PermaLink,guid,3e97d7a6-4f22-4709-9dd6-6553d148e341.aspx</guid>
      <link>http://www.cjcraft.com/blog/2008/06/01/30DaysOfNETWindowsMobileApplications.aspx</link>
      <pubDate>Sun, 01 Jun 2008 08:00:35 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay01Min_F63E/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="254" alt="image" src="http://www.cjcraft.com/blog/content/binary/WindowsLiveWriter/30D.NETWindowsMobileApplicationsDay01Min_F63E/image_thumb.png" width="190" align="right" border="0"&gt;&lt;/a&gt; Over
the years, I have given many presentations on developing Windows Mobile applications.
One thing that I have heard time and time again is that people have a hard time writing
their first mobile application. I think sometimes people have a hard time taking those
first steps. It is easy to think that it will take too much time, and that it will
be too hard. But that is simply not the case.
&lt;/p&gt;
&lt;p&gt;
But instead of telling people, I'm going to show them how easy it really is. The key
here is simple: &lt;strong&gt;"Taking baby steps is better than taking no steps at all!"&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I plan on writing 30 mobile applications in the next 30 days. I will publish both
the executable and the source code for each application.
&lt;/p&gt;
&lt;p&gt;
My goal is for each of these applications to be useful, interesting, and straight-forward.
Someone considering writing their first Windows Mobile application should be able
to look at these applications and "get it". 
&lt;/p&gt;
&lt;p&gt;
If you search, you can find tons of simple code to do specific tasks, like playing
a message beep. You can even search and find code for fully developed applications,
but these are too advanced for many developers, first starting out. What you'll have
a harder time finding are simple applications, with source code, that can be the building
blocks for new developer's understanding of mobile development. It's my hope that
in the next 30 days I can do something to help with that.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Please consider this entire series an open forum. I'd love to hear what you think,
and what you want. Do you think this will help new mobile developers? Are you a new
to mobile development? If so, what would most help you "get it"?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.cjcraft.com/blog/aggbug.ashx?id=3e97d7a6-4f22-4709-9dd6-6553d148e341" /&gt;</description>
      <comments>http://www.cjcraft.com/blog/CommentView,guid,3e97d7a6-4f22-4709-9dd6-6553d148e341.aspx</comments>
      <category>.Net Programming</category>
      <category>30 Day of .NET</category>
      <category>compact framework</category>
      <category>cool</category>
      <category>MVP</category>
      <category>pocket pc</category>
      <category>programming</category>
      <category>windows mobile</category>
    </item>
  </channel>
</rss>