<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Copy and Waste</title>
        <link>http://copyandwaste.com/Default.aspx</link>
        <description>nuts, bolts, reused</description>
        <language>en-US</language>
        <copyright>Andrew Konkol</copyright>
        <managingEditor>akonkol@copyandwaste.com</managingEditor>
        <generator>Subtext Version 1.9.5.177</generator>
        <image>
            <title>Copy and Waste</title>
            <url>http://copyandwaste.com/images/RSS2Image.gif</url>
            <link>http://copyandwaste.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Building a mouse picture post</title>
            <link>http://copyandwaste.com/archive/2008/07/29/building-a-mouse-picture-post.aspx</link>
            <description>I've decided to make my own mouse, because I like hardware and there is an artistic element to the project.
&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1176.jpg" alt="IMGP1176.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1177.jpg" alt="IMGP1177.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1178.jpg" alt="IMGP1178.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1183.jpg" alt="IMGP1183.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1185.jpg" alt="IMGP1185.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1189.jpg" alt="IMGP1189.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1191.jpg" alt="IMGP1191.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1194.jpg" alt="IMGP1194.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1195.jpg" alt="IMGP1195.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1199.jpg" alt="IMGP1199.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1201.jpg" alt="IMGP1201.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1202.jpg" alt="IMGP1202.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1209.jpg" alt="IMGP1209.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1212.jpg" alt="IMGP1212.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1213.jpg" alt="IMGP1213.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/images/copyandwaste_com//IMGP1215.jpg" alt="IMGP1215.jpg" border="0" width="640" height="480" /&gt;&lt;img src="http://copyandwaste.com/aggbug/36.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andrew Konkol</dc:creator>
            <guid>http://copyandwaste.com/archive/2008/07/29/building-a-mouse-picture-post.aspx</guid>
            <pubDate>Wed, 30 Jul 2008 03:06:40 GMT</pubDate>
            <wfw:comment>http://copyandwaste.com/comments/36.aspx</wfw:comment>
            <comments>http://copyandwaste.com/archive/2008/07/29/building-a-mouse-picture-post.aspx#feedback</comments>
            <wfw:commentRss>http://copyandwaste.com/comments/commentRss/36.aspx</wfw:commentRss>
            <trackback:ping>http://copyandwaste.com/services/trackbacks/36.aspx</trackback:ping>
        </item>
        <item>
            <title>John Appleseed</title>
            <link>http://copyandwaste.com/archive/2008/07/27/john-appleseed.aspx</link>
            <description>&lt;p&gt;I now own my first Apple computer.  After a week of debate with my inter demons, I pulled the trigger on a 24" imac 3.06Ghz core 2 duo. 
&lt;/p&gt;
&lt;p&gt;The imac kind of goes against everything I've ever wanted.  I haven't bought a put-together PC let alone an "all-in-one" machine in over 10 years.  I've built dozens maybe even hundreds of machines at this point in my life.  So... Why?  Whenever I move it seems like I've collected more machines than the last time I moved.  There is always (and almost overwhelming) collection of hardware which I have kept for the last few years.
&lt;/p&gt;

&lt;p&gt;
I have less and less time to muck around with multiple machines and keep things for the sake of "oh thats going to be part of project z."  I had to consolidate... I got rid of my Pentium II machine I was using as a pf firewall and local dns, an other machine that was a frankenpix, and two micro-itx machines which were once a car computer, and a mythtv set top box.
&lt;/p&gt;
&lt;p&gt;
Although I never thought I would buy a all-in-once machine ever, like ever... I really enjoy it.  If I want to accomplish a task I can write a bash script and run it with cron, but if I want to watch movies and need a nice UI.. I have it.
&lt;/p&gt;

Software I think is good... (many suggestions via &lt;a href="http://www.decavolt.com"&gt;decavolt&lt;/a&gt;)
&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://www.blacktree.com/"&gt;Quicksilver&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.obdev.at/products/littlesnitch/index.html"&gt;Little Snitch&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.griffintechnology.com/products/powermate"&gt;Griffin powermate&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.keepassx.org/"&gt;KeePassX&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.red-sweater.com/marsedit/"&gt;MarsEdit&lt;/a&gt; is not as good as Windows Live Writer&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.vmware.com/products/fusion/"&gt;Vmware Fusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
I hate the trash can... simple bash script to run in cron (runs on the 59th minute of every hour everyday:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;
59      *       *       *       1,2,3,4,5,6,7   /bin/rm -rf /Users/akonkol/.Trash/* 
&lt;/p&gt;

&lt;p&gt;
I've found there isn't a lot of good freeware for Mac, useful programs you would find in a Windows environment for free are usually about $30-$40 in the mac world.  Because of my current environment and a bet at work.. I've started learning ruby on rails... I'm also making a mouse.
&lt;/p&gt;


&lt;img src="http://copyandwaste.com/aggbug/35.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andrew Konkol</dc:creator>
            <guid>http://copyandwaste.com/archive/2008/07/27/john-appleseed.aspx</guid>
            <pubDate>Mon, 28 Jul 2008 01:57:34 GMT</pubDate>
            <wfw:comment>http://copyandwaste.com/comments/35.aspx</wfw:comment>
            <comments>http://copyandwaste.com/archive/2008/07/27/john-appleseed.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://copyandwaste.com/comments/commentRss/35.aspx</wfw:commentRss>
            <trackback:ping>http://copyandwaste.com/services/trackbacks/35.aspx</trackback:ping>
        </item>
        <item>
            <title>BlueBoss v2.0 - Bluetooth Proximity Alerting</title>
            <link>http://copyandwaste.com/archive/2008/06/23/blueboss-v2.0---bluetooth-proximity-alerting.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; Bluetooth is now found in a variety of devices and enable the user to use wireless accessories.  The Bluetooth protocol allows a user to “discover” any device that is in proximity to your Bluetooth radio.  Why not see who is in proximity to you?  Why not have the presence of a device execute programs or alert you?&lt;/p&gt;  &lt;p&gt;Andy Konkol – &lt;u&gt;&lt;a href="http://copyandwaste.com/"&gt;http://copyandwaste.com&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Download:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;&lt;a href="http://www.codeplex.com/blueboss/Release/ProjectReleases.aspx?ReleaseId=14662"&gt;Source / Binary Download&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Hardware:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;Bluetooth radio (USB dongle)&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;SMA Female Jack&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;SMA male to N-male pigtail&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;2.4 GHz antenna (with N-female connector)&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Software:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;&lt;u&gt;&lt;a href="http://www.microsoft.com/express/samples/c4fdevkit/default.aspx"&gt;Coding4fun Developer Kit&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;u&gt;&lt;a href="http://www.codeproject.com/KB/miscctrl/RobMisNotifyWindow.aspx"&gt;Robert Misiak's Notify Window&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Bluetooth and Hardware:&lt;/strong&gt;    &lt;br /&gt;Bluetooth was designed for devices to communicate wirelessly over short distances.  However, with a very simple hardware modification you can extend the range of your Bluetooth radio with standard 2.4ghz antennas used in wireless networking (802.11 a/b/g). &lt;/p&gt;  &lt;p&gt;Modifying Bluetooth dongles to accept external antennas is documented all over the Internet.  In principle it is very easy: find the antenna lead and solder on a connector/antenna.  I purchased a very cheap Bluetooth USB dongle on eBay and opened the casing.  After finding the antenna trace on the circuit board I soldered on a SMA Female connector to it.  After soldering the antenna jack in place I slipped a 3 inch chunk of heatshrink and heated it to cover the exposed circuit board.  Now I had a Bluetooth radio that accepts external antennas. Adding an antenna simply increases the range of your radio, allowing you to “see” devices from a farther distance. &lt;/p&gt;  &lt;p&gt;To connect an external antenna to the dongle I needed to use a connector converter called a pigtail.  I used a SMA male to N-male pigtail.  I connected one end of the pigtail to my dongle and the other to an omni-directional 9dbi panel antenna that had an N-female connector.&lt;/p&gt;  &lt;p&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/IMG_2070.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="IMG_2070" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/IMG_2070_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/IMG_2071.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="IMG_2071" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/IMG_2071_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Software:&lt;/strong&gt;    &lt;br /&gt;To take advantage of my newly modified hardware I needed to download the Coding4Fun Toolkit.  Included in the toolkit is an API for Bluetooth devices.  This API allows you to do a wide variety of things with your Bluetooth radio but I focused on two methods from the ServiceAndDeviceDiscovery library: DiscoverAllDevices and DiscoverDeviceByName. &lt;/p&gt;  &lt;p&gt;DiscoverAllDevices allows you to “scan” the airwaves on the 2.4 GHz band and report back what devices your radio sees. &lt;/p&gt;  &lt;p&gt;DiscoverDeviceByName allows you to scan for a particular device with a specified name and report back if it is present or not.&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; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; max-height: 200px"&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, 'Courier New', 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, 'Courier New', 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;bool&lt;/span&gt; DevicePresent()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;             BluetoothDeviceServicesManager workerBTMgr = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BluetoothDeviceServicesManager();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;             Device workerDevice = workerBTMgr.DiscoverDeviceByName(_watchItem.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, 'Courier New', 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, 'Courier New', 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; (workerDevice != &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, 'Courier New', 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, 'Courier New', 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;return&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, 'Courier New', 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, 'Courier New', 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;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, 'Courier New', 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, 'Courier New', 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;return&lt;/span&gt; &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, 'Courier New', 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, 'Courier New', 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, 'Courier New', 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, 'Courier New', 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, 'Courier New', 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;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Run(String Operation)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;span style="color: #0000ff"&gt;switch&lt;/span&gt; (Operation)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;case&lt;/span&gt; &lt;span style="color: #006080"&gt;"SingleDevice"&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, 'Courier New', 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;span style="color: #0000ff"&gt;if&lt;/span&gt; (DevicePresent())&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;                         _parentForm.Invoke(_parentForm.AddToDeviceSeenList, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] {_watchItem});&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;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, 'Courier New', 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;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;                         _parentForm.Invoke(_parentForm.RemoveFromDeviceSeenList, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { _watchItem });&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;                     &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, 'Courier New', 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;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;"AllDevices"&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, 'Courier New', 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;                     BluetoothDeviceServicesManager workerBTMgr = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BluetoothDeviceServicesManager();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;                     List&amp;lt;Device&amp;gt; Devices = workerBTMgr.DiscoverAllDevices();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;                     _parentForm.Invoke(_parentForm.ThreadUpdateDiscoverBox, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { Devices });&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;                     &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, 'Courier New', 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;             }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;         }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Both of these methods require that the device you are scanning for is in discoverable mode (which most manufacturers enable by default).  Using the two methods described above I was able to tell if a device is in proximity. And ultimately enabling me create alerts and execute programs based on what device is present. &lt;/p&gt;

&lt;p&gt;To perform device discovery and not have my UI lag I had to create two worker threads.  One worker thread to discover all devices and display it under my devices listbox, and another to discover devices by name specified in the “watchlist.”  I am not an expert at multi-threaded programs but I managed to implement them without any major headaches.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Interface:&lt;/strong&gt;

  &lt;br /&gt;Since the “Add to watchlist” and “Edit” buttons essentially do the same thing, I decided to overload a windows form.  I also wanted to keep track of the parent form and disable it when the WatchItemForm was shown. &lt;/p&gt;

&lt;p&gt;The second overload allows me to fill in the form control's text based on the data that is already set for the WatchItem that has been selected (the Edit button).  &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; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; max-height: 200px"&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, 'Courier New', 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, 'Courier New', 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; WatchItemForm(Form1 f, String 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, 'Courier New', 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, 'Courier New', 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;             InitializeComponent();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;this&lt;/span&gt;._parentForm = f;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;             lblDeviceName.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, 'Courier New', 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, 'Courier New', 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, 'Courier New', 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, 'Courier New', 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; WatchItemForm(Form1 f, WatchItem 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, 'Courier New', 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, 'Courier New', 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;             InitializeComponent();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;this&lt;/span&gt;._parentForm = f;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;             lblDeviceName.Text = item.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, 'Courier New', 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;             tbxAlertMessage.Text = item.AlertMessage;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;             tbxPicturePath.Text = item.ImagePath;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;             tbxProgramPath.Text = item.ProgramPath;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;this&lt;/span&gt;._parentForm.Enabled = &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, 'Courier New', 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, 'Courier New', 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;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I wanted to have a pop up notify window similar to outlook and was able to find Robert Misiak's &lt;u&gt;&lt;a href="http://www.codeproject.com/KB/miscctrl/RobMisNotifyWindow.aspx"&gt;NotifyWindow&lt;/a&gt;&lt;/u&gt;. This is a very simple library which allows you to create pop up notify windows very easily. I edited NotifyWindow to include a “picturepath” variable as well as picturebox on the form. As you can see creating a NotifyWindow is quite easy:&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; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; max-height: 200px"&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, 'Courier New', 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, 'Courier New', 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; NotifyDeviceWindow(WatchItem 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, 'Courier New', 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, 'Courier New', 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;     NotifyWindow nw;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;     nw = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NotifyWindow();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;//validate Alert 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, 'Courier New', 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; (x.AlertMessage == &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, 'Courier New', 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, 'Courier New', 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;         nw.Text = x.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, 'Courier New', 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, 'Courier New', 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;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, 'Courier New', 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, 'Courier New', 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;         nw.Text = x.AlertMessage;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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: #008000"&gt;//validate picture&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, 'Courier New', 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; (x.ImagePath != &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, 'Courier New', 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, 'Courier New', 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;         FileInfo imgfile = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileInfo(x.ImagePath);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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; (imgfile.Exists)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;             nw.PicturePath = x.ImagePath;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;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, 'Courier New', 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, 'Courier New', 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;             MessageBox.Show(&lt;span style="color: #006080"&gt;"Image does not exist"&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, 'Courier New', 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;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;     nw.Notify();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;span style="color: #0000ff"&gt;if&lt;/span&gt; (x.ProgramPath != &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, 'Courier New', 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;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;         RunProcess(x.ProgramPath);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Process Flow/Software Operation:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;User clicks the “Discover” button, a thread is spawned which enumerates all Bluetooth devices in proximity&lt;/li&gt;

  &lt;li&gt;Thread finishes and updates the Devices listbox&lt;/li&gt;

  &lt;li&gt;User selects a discovered device and clicks “Add to watchlist” A watch item form is spawned and asks you for an alert message, a picture path, and an executable path&lt;/li&gt;

  &lt;li&gt;User clicks save , a WatchItem object is created and added to the watchList object&lt;/li&gt;

  &lt;li&gt;A timer starts and every 10 seconds a thread is spawned to discover that device by name&lt;/li&gt;

  &lt;li&gt;If the device is discovered, it is added to the “deviceSeenList” and a notify alert is sent and the executable is executed.&lt;/li&gt;

  &lt;li&gt;If that device is still present after the next timer click, no notification is sent, If that device is not present it is removed from the “deviceSeenList”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Screenshots:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/bb-main.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="375" alt="bb-main" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/bb-main_thumb.jpg" width="553" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/bb-watchitem.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="210" alt="bb-watchitem" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/bb-watchitem_thumb.jpg" width="257" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/bb-notify_1.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="173" alt="bb-notify" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossv2.0BluetoothProximityAlerting_1014F/bb-notify_thumb_1.jpg" width="226" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://copyandwaste.com/aggbug/32.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andrew Konkol</dc:creator>
            <guid>http://copyandwaste.com/archive/2008/06/23/blueboss-v2.0---bluetooth-proximity-alerting.aspx</guid>
            <pubDate>Mon, 23 Jun 2008 23:19:42 GMT</pubDate>
            <wfw:comment>http://copyandwaste.com/comments/32.aspx</wfw:comment>
            <comments>http://copyandwaste.com/archive/2008/06/23/blueboss-v2.0---bluetooth-proximity-alerting.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://copyandwaste.com/comments/commentRss/32.aspx</wfw:commentRss>
            <trackback:ping>http://copyandwaste.com/services/trackbacks/32.aspx</trackback:ping>
        </item>
        <item>
            <title>What's next?</title>
            <link>http://copyandwaste.com/archive/2008/06/15/whats-next.aspx</link>
            <description>&lt;p&gt;I haven't bought a pre-made computer in more than 10 years.  I think I have finally gotten to a point where I don't want to muck around with commodity computer hardware.  It's time to buy a pre-made machine.  I use a wide variety of operating systems at home and at work.  The idea of a virtual desktop is very appealing to me.... a single machine where I can have windows, bsd, linux, and mac os x would be great.  I've done some research on "hackintosh" and to be honest... for the first time... it's a diy project I don't want to do. So I've pretty much decided that I need to buy a mac and a copy of parallels.  Now what kind of mac do I want? Macbook pro, Mac pro, or an iMac?&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Mac pro is just way too much money  but upgrading would be easy.&lt;/p&gt;  &lt;p&gt;iMac is a pretty closed device where replacing common things like hard disks could be a project... but the screen is so nice!&lt;/p&gt;  &lt;p&gt;Macbook Pro would be pretty awesome but lacks some of the power I would like for virtualization.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;It looks more and more that I should just get an iMac and stfu.  Maybe I'll get one...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/Whatsnext_10807/imac_narrowweb__300x4422_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="442" alt="imac_narrowweb__300x4422" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/Whatsnext_10807/imac_narrowweb__300x4422_thumb.jpg" width="300" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://copyandwaste.com/aggbug/31.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andrew Konkol</dc:creator>
            <guid>http://copyandwaste.com/archive/2008/06/15/whats-next.aspx</guid>
            <pubDate>Sun, 15 Jun 2008 23:46:15 GMT</pubDate>
            <wfw:comment>http://copyandwaste.com/comments/31.aspx</wfw:comment>
            <comments>http://copyandwaste.com/archive/2008/06/15/whats-next.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://copyandwaste.com/comments/commentRss/31.aspx</wfw:commentRss>
            <trackback:ping>http://copyandwaste.com/services/trackbacks/31.aspx</trackback:ping>
        </item>
        <item>
            <title>4U2SEE LED Sign Revisited</title>
            <link>http://copyandwaste.com/archive/2008/06/14/4u2see-led-sign-revisited.aspx</link>
            <description>&lt;p&gt;I lost the source code I had originally for this sign.  Chris Gray left a comment about help and I ultimately ended up re-visiting code for the 4U2See.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.copyandwaste.com/downloads/CinderSerial.zip"&gt;Download CinderSerial&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;sign fixed with a hack...&lt;/h2&gt;  &lt;p&gt;The problem is that when I try to send a "file" to the sign,&lt;/p&gt;  &lt;p&gt;c:\sequent.sys (on the sign) does nothget updated.  So you create a legit file with sigma editor, rename it without an extension.  Push the renamed file with sigma play.  This will update the sequent.sys&lt;/p&gt;  &lt;p&gt;file on the sign.  Now run my program which sends a file named "A" to the sign and it should work.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Open Sigma Editor:&lt;/p&gt;  &lt;p&gt;------------------&lt;/p&gt;  &lt;p&gt;1) Click new file&lt;/p&gt;  &lt;p&gt;2) enter in "working?"&lt;/p&gt;  &lt;p&gt;3) Save to computer as "A.nmg"&lt;/p&gt;  &lt;p&gt;4) Exit Sigma editor&lt;/p&gt;  &lt;p&gt;5) Rename file to "A" (no extension)&lt;/p&gt;  &lt;p&gt;Open Sigma Player:&lt;/p&gt;  &lt;p&gt;------------------&lt;/p&gt;  &lt;p&gt;6) Click on List Manage&lt;/p&gt;  &lt;p&gt;7) Expand My Play List&lt;/p&gt;  &lt;p&gt;8) Select all files in the right hand pane and delete them&lt;/p&gt;  &lt;p&gt;9) Click the add button and find the "A" file in step 5&lt;/p&gt;  &lt;p&gt;10) Send to sign&lt;/p&gt;  &lt;p&gt;Compile my program (CinderSerial)&lt;/p&gt;  &lt;p&gt;---------------------------------&lt;/p&gt;  &lt;p&gt;1) Type in text you want to be displayed&lt;/p&gt;  &lt;p&gt;2) Select a color&lt;/p&gt;  &lt;p&gt;3) (display mode isnt implemented yet)&lt;/p&gt;  &lt;p&gt;4) Click submit&lt;/p&gt;&lt;img src="http://copyandwaste.com/aggbug/30.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andrew Konkol</dc:creator>
            <guid>http://copyandwaste.com/archive/2008/06/14/4u2see-led-sign-revisited.aspx</guid>
            <pubDate>Sat, 14 Jun 2008 21:21:26 GMT</pubDate>
            <wfw:comment>http://copyandwaste.com/comments/30.aspx</wfw:comment>
            <comments>http://copyandwaste.com/archive/2008/06/14/4u2see-led-sign-revisited.aspx#feedback</comments>
            <slash:comments>16</slash:comments>
            <wfw:commentRss>http://copyandwaste.com/comments/commentRss/30.aspx</wfw:commentRss>
            <trackback:ping>http://copyandwaste.com/services/trackbacks/30.aspx</trackback:ping>
        </item>
        <item>
            <title>BlueBoss- Bluetooth Proximity Alerting</title>
            <link>http://copyandwaste.com/archive/2008/06/08/blueboss--bluetooth-proximity-alerting.aspx</link>
            <description>&lt;p&gt;Chances are that your boss, director, or CTO is using bluetooth on their phone.  Since they are using bluetooth you can scan the 2.4ghz radio band and look for devices that are within the proximity of your bluetooth dongle(radio).  This application scans that band for devices that are within your proximity and allows you to receive a pop-up message from the system tray when a known  device is in the area.  More importantly you can configure applications to be run, like..... "firefox www.yourcompanieswebsite.com"  when  say... your boss's bluetooth enabled phone is in the proximity.&lt;/p&gt;  &lt;p&gt;You do not have to be paired with any bluetooth device to be able to discover it with the Coding 4 Fun bluetooth API.  Although using this method of discovery is not guaranteed I have found it to work in a variety of phones.  To increase the range of my radio I modified my dongle to accept an external antenna.  With this hardware I can get a range of about 50 feet tested.&lt;/p&gt;  &lt;h3&gt;Hardware:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Bluetooth Dongle - $1.99&lt;/li&gt;    &lt;li&gt;SMA Female connector - Free (had one)&lt;/li&gt;    &lt;li&gt;SMA to N-Male pigtail - $6.99&lt;/li&gt;    &lt;li&gt;9dbi Panel Antenna - Free (had one)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/IMG_2067.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="IMG_2067" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/IMG_2067_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/IMG_2068.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="IMG_2068" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/IMG_2068_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/IMG_2071.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="IMG_2071" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/IMG_2071_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/IMG_2073.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="IMG_2073" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/IMG_2073_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Software: &lt;/h3&gt;  &lt;p&gt;All you have to do is press "Discover" when the bluetooth device is in proximity and Add it to the Watchlist.  You may specify an alert message, a picture to display, and/or a program to run.  A worker thread is spawned when the Discover button is pressed:&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.09%; cursor: text; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 314px; background-color: #f4f4f4; max-height: 200px"&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, 'Courier New', 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, 'Courier New', 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; btnDiscover_Click(&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, 'Courier New', 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, 'Courier New', 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;     btnDiscover.Text = &lt;span style="color: #006080"&gt;"scanning"&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, 'Courier New', 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;     btnDiscover.Enabled = &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, 'Courier New', 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, 'Courier New', 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;     m_EventStopThread.Reset();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;     m_EventThreadStopped.Reset();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;// create worker thread instance for discovering all devices&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, 'Courier New', 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;     m_WorkerThread2 = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Thread(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ThreadStart(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.DiscoverWorkerThread));&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;     m_WorkerThread2.Name = &lt;span style="color: #006080"&gt;"Discovering Worker Thread"&lt;/span&gt;;    &lt;span style="color: #008000"&gt;// looks nice in Output window&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, 'Courier New', 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;     m_WorkerThread2.Start();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;     lbxDevices.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, 'Courier New', 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, 'Courier New', 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;/p&gt;

&lt;p&gt;On Form load, a timer is enabled for 10 seconds, when that timer "ticks" a DiscoverByName is performed by a worker thread:&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.01%; cursor: text; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 330px; background-color: #f4f4f4; max-height: 200px"&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, 'Courier New', 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, 'Courier New', 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; tmrMain_Tick(&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, 'Courier New', 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, 'Courier New', 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;//read xml config &amp;gt;&amp;gt; watchList&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, 'Courier New', 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;//timer went off, foreach watchitem spawn worker thread to poll device&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, 'Courier New', 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;(WatchItem tmp &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; watchList.WatchItems)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;// reset events&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, 'Courier New', 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;                m_EventStopThread.Reset();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;                m_EventThreadStopped.Reset();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;// create worker thread instance&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, 'Courier New', 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;                m_WorkerThread = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Thread(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ParameterizedThreadStart(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.WorkerThreadFunction));&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;                m_WorkerThread.Name = &lt;span style="color: #006080"&gt;"Worker Thread Discover By Name"&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, 'Courier New', 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;                m_WorkerThread.Start(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, 'Courier New', 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, 'Courier New', 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, 'Courier New', 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;From the "Worker" class, which actually does the polling and callback to the parent form delegate:&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: 75.83%; cursor: text; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 580px; background-color: #f4f4f4; max-height: 200px"&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, 'Courier New', 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, 'Courier New', 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;bool&lt;/span&gt; DevicePresent()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;     BluetoothDeviceServicesManager workerBTMgr = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BluetoothDeviceServicesManager();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;     Device workerDevice = workerBTMgr.DiscoverDeviceByName(m_WatchItem.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, 'Courier New', 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, 'Courier New', 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; (workerDevice != &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, 'Courier New', 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, 'Courier New', 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;return&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, 'Courier New', 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, 'Courier New', 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;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, 'Courier New', 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, 'Courier New', 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;return&lt;/span&gt; &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, 'Courier New', 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, 'Courier New', 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, 'Courier New', 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, 'Courier New', 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, 'Courier New', 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;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Run()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;span style="color: #0000ff"&gt;if&lt;/span&gt; (DevicePresent())&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;try&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, 'Courier New', 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, 'Courier New', 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;             m_form.Invoke(m_form.m_NotifyDevicePresent, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { m_WatchItem });&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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, 'Courier New', 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;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;             MessageBox.Show(ex.Message.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, 'Courier New', 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;             &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', 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; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/bb-main.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="393" alt="bb-main" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/bb-main_thumb.gif" width="489" border="0" /&gt;&lt;/a&gt;  &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/bb-watchitem_1.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="203" alt="bb-watchitem" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/bb-watchitem_thumb_1.gif" width="263" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Once you have added a device to the watchlist a worker thread is spawned and tries to discover that device every 15 seconds or so.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/bb-notify_2.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="154" alt="bb-notify" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/BlueBossBluetoothProximityAlerting_FFC1/bb-notify_thumb_2.gif" width="156" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Some code I used:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.microsoft.com/express/samples/c4fdevkit/default.aspx"&gt;Coding4fun Developer Kit&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/miscctrl/RobMisNotifyWindow.aspx"&gt;Robert Misiak's Notify Window&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/cs/workerthread.aspx"&gt;Alex Fr's Worker Threads in C# tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;a href="http://www.copyandwaste.com/downloads/BlueBoss.zip"&gt;Download BlueBoss v1.0&lt;/a&gt;&lt;/h3&gt;&lt;img src="http://copyandwaste.com/aggbug/29.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andrew Konkol</dc:creator>
            <guid>http://copyandwaste.com/archive/2008/06/08/blueboss--bluetooth-proximity-alerting.aspx</guid>
            <pubDate>Mon, 09 Jun 2008 04:39:13 GMT</pubDate>
            <wfw:comment>http://copyandwaste.com/comments/29.aspx</wfw:comment>
            <comments>http://copyandwaste.com/archive/2008/06/08/blueboss--bluetooth-proximity-alerting.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://copyandwaste.com/comments/commentRss/29.aspx</wfw:commentRss>
            <trackback:ping>http://copyandwaste.com/services/trackbacks/29.aspx</trackback:ping>
        </item>
        <item>
            <title>Alix 2C.3 OpenBSD 4.3</title>
            <link>http://copyandwaste.com/archive/2008/05/26/alix-2c.3-openbsd-4.3.aspx</link>
            <description>&lt;p&gt;It was time to replace my mid-tower Pentium II soho router running OpenBSD with something smaller.  There has been quite a bit of interest in the community about single board computers, such as soekris and alix  and I decided to dive right in.  Single board computers are just that, everything you need for a basic bare bones machine.  Due to cost I chose an &lt;a href="http://pcengines.ch/alix2c3.htm"&gt;ALIX 2C.3&lt;/a&gt; board and a silver &lt;a href="http://pcengines.ch/case1c2u.htm"&gt;case&lt;/a&gt; to go with it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/Alix2C.3OpenBSD4.3_2012/alix2b3_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="500" alt="alix2b3" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/Alix2C.3OpenBSD4.3_2012/alix2b3_thumb.jpg" width="484" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/Alix2C.3OpenBSD4.3_2012/case1c2u_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="448" alt="case1c2u" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/Alix2C.3OpenBSD4.3_2012/case1c2u_thumb.jpg" width="660" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Hardware:&lt;/h3&gt;  &lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Item&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Price&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;ALIX 2C.3&lt;/td&gt;        &lt;td valign="top" width="200"&gt;$137.00&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;15v/1.2A AC-DC Power Adapter&lt;/td&gt;        &lt;td valign="top" width="200"&gt;$9.95&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Enclosure 3 LAN for Alix.2&lt;/td&gt;        &lt;td valign="top" width="200"&gt;$12.95&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;1GB CF card&lt;/td&gt;        &lt;td valign="top" width="200"&gt;$10&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Targus TG-CRD25 Universal 32-in-1 Memory Card Reader&lt;/td&gt;        &lt;td valign="top" width="200"&gt;$4.99&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;strong&gt;Total:&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="200"&gt;$174.89&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Software:&lt;/h3&gt;  &lt;p&gt;I chose OpenBSD as the operating system because of it's simplicity, pf, and I use it everyday.  There is a project by nmedia.net that focuses on building OpenBSD images for single board computers called &lt;a href="http://www.nmedia.net/flashdist/"&gt;flashdist&lt;/a&gt; but I decided to take a different approach.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Installation: Putting OpenBSD on Compact Flash&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;Connect usb cf reader with memory card inserted to any i386 machine&lt;/li&gt;    &lt;li&gt;Insert OpenBSD CD and boot from it&lt;/li&gt;    &lt;li&gt;Upon boot my cf card is recognized as /dev/sd0&lt;/li&gt;    &lt;li&gt;Follow basic install guide which can be found &lt;a href="http://www.openbsd101.com/installation.html"&gt;here&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Once you get to the part where you select your disk supply the path to your cf.&lt;/li&gt;    &lt;pre&gt;Available disks are: sd0.
Which one is the root disk? (or done) [sd0] &amp;lt;enter&amp;gt;
Do you want to use *all* of sd0 for OpenBSD? [no] yes&lt;/pre&gt;

  &lt;li&gt;Since the disk is so small I decided just to go ahead and make a single partition which mounts "/"&lt;/li&gt;

  &lt;li&gt;Configure your networking etc... and select what packages you need (with size concerns in mind)&lt;/li&gt;

  &lt;li&gt;After the packages are installed go through the rest of the setup criteria and halt the fresh install&lt;/li&gt;

  &lt;li&gt;Remove the CF card and insert it into your ALIX board and boot.&lt;/li&gt;

  &lt;li&gt;Your ALIX board should be addressed and running sshd, login and config!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I added wget, pftop, and ntop through pkg_add, configured named for local dns, and configured dhcpd to provide addresses for all hosts on my network.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;This device is awesome....tiny...silent...low power and does everything I need.&lt;/p&gt;&lt;img src="http://copyandwaste.com/aggbug/28.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andrew Konkol</dc:creator>
            <guid>http://copyandwaste.com/archive/2008/05/26/alix-2c.3-openbsd-4.3.aspx</guid>
            <pubDate>Mon, 26 May 2008 07:34:40 GMT</pubDate>
            <wfw:comment>http://copyandwaste.com/comments/28.aspx</wfw:comment>
            <comments>http://copyandwaste.com/archive/2008/05/26/alix-2c.3-openbsd-4.3.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://copyandwaste.com/comments/commentRss/28.aspx</wfw:commentRss>
            <trackback:ping>http://copyandwaste.com/services/trackbacks/28.aspx</trackback:ping>
        </item>
        <item>
            <title>LED sign matrix and C#</title>
            <link>http://copyandwaste.com/archive/2008/05/26/led-sign-matrix-and-c.aspx</link>
            <description>&lt;p&gt;For &lt;a href="http://www.makerfaire.com"&gt;Maker Faire&lt;/a&gt; I built a LED display using 10 &lt;a href="http://www.betabrite.com/pdfs/1196650401BBPrism.pdf"&gt;BetaBrite Prism&lt;/a&gt; signs.  Everything I used was store bought and nothing custom.  The general idea was to capture motion video using a webcam and display it on this matrix of LED signs.  However, after receiving the hardware this became impossible noting the 3-4 second delay in the time from which transmission to the sign starts, and when the image is displayed.  I also wanted to take advantage of the usb port on each sign but ran into problems connecting more than one BetaBrite Prism via usb at a time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;COMPROMISE-- &lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Since the signs where too slow I had to change the direction of this project into a "photo booth" of sorts meaning that I would take timed snapshots via a webcam instead of full motion video.&lt;/li&gt;    &lt;li&gt;Connecting more than one sign using USB didn't work so I was stuck buying 10 USB-&amp;gt;Serial adaptors&lt;/li&gt;    &lt;li&gt;The signs support up to 64 colors, however trying to modify the BetaBrite class to handle these colors fell through.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Hardware:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/LEDsignmatrixandC_14E6C/pcms882224035477rt.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="119" alt="pcms882224035477rt" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/LEDsignmatrixandC_14E6C/pcms882224035477rt_thumb.jpg" width="104" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/LEDsignmatrixandC_14E6C/181796bs_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="123" alt="181796bs" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/LEDsignmatrixandC_14E6C/181796bs_thumb.jpg" width="123" border="0" /&gt;&lt;/a&gt;  &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/LEDsignmatrixandC_14E6C/10033386_4.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="123" alt="10033386" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/LEDsignmatrixandC_14E6C/10033386_thumb_1.jpg" width="104" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;10 BetaBrite Prism signs&lt;/li&gt;    &lt;li&gt;10 Serial to USB converters&lt;/li&gt;    &lt;li&gt;3 USB SQUID&lt;/li&gt;    &lt;li&gt;1 USB Xbox Webcam&lt;/li&gt;    &lt;li&gt;Plywood&lt;/li&gt;    &lt;li&gt;Drywall Screws&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Software:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;BetaBrite API written by Jeff Atwood, ported by &lt;a href="http://www.betterthaneveryone.com"&gt;Clint Rutkas&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;DirectShow lib (emphasis on DxSnap application)&lt;/li&gt;    &lt;li&gt;Code to splice web cam images and send to sign&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can download my source &lt;a href="http://www.copyandwaste.com/downloads/DxSnap.zip"&gt;here.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A picture (bitmap) is taken by the attached webcam using DirectShowLib, that bitmap is "spliced" meaning divided into 7 pixel by 80 pixel pieces (the LED layout on the sign).  Each of those pictures is analyzed by the BetaBrite API and the pixels are checked one by one and associate a color value to that pixel to be sent to the sign.  Once pixel color information is determined, that information is sent to the correct BetaBrite sign over a RS232 connection.&lt;/p&gt;  &lt;p&gt;...hey! that's simple!... that's the point!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Some Details:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In order to aide the "pixel correlation" step I used the webcam property page to adjust the settings so that the webcam was set for high contrast and high saturation.&lt;/li&gt;    &lt;li&gt;To keep the sending info the sign automated I connected each serial to usb adaptor one at a time making sure they showed up in sequence (i.e. COM6, COM7, COM8) and positioned the signs accordingly on the plywood stand.&lt;/li&gt;    &lt;li&gt;To compensate for the bezels on the signs I simply "cut out" those pixels when splicing the image&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;First Picture: Rob Taking his picture (the screen has not updated yet)&lt;/p&gt;  &lt;p&gt;Second Pictures: Rob's picture on the LED screen&lt;/p&gt;  &lt;p&gt;&lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/LEDsignmatrixandC_14E6C/n4713141_33421112_5179_2_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="457" alt="n4713141_33421112_5179_2" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/LEDsignmatrixandC_14E6C/n4713141_33421112_5179_2_thumb.jpg" width="608" border="0" /&gt; &lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="484" alt="n4713141_33421113_5499_2" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/LEDsignmatrixandC_14E6C/n4713141_33421113_5499_2_thumb.jpg" width="364" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://copyandwaste.com/aggbug/27.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andrew Konkol</dc:creator>
            <guid>http://copyandwaste.com/archive/2008/05/26/led-sign-matrix-and-c.aspx</guid>
            <pubDate>Mon, 26 May 2008 06:50:10 GMT</pubDate>
            <wfw:comment>http://copyandwaste.com/comments/27.aspx</wfw:comment>
            <comments>http://copyandwaste.com/archive/2008/05/26/led-sign-matrix-and-c.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://copyandwaste.com/comments/commentRss/27.aspx</wfw:commentRss>
            <trackback:ping>http://copyandwaste.com/services/trackbacks/27.aspx</trackback:ping>
        </item>
        <item>
            <title>Maker Faire and why I was busy.</title>
            <link>http://copyandwaste.com/archive/2008/05/06/maker-faire-and-why-i-was-busy.aspx</link>
            <description>&lt;p&gt;I was asked to join the Microsoft Coding4Fun team this year at Maker Faire.  The project I came up with was multiplexing several stock store bought signs and display full motion video from a webcam on them... Unfortunately it's almost impossible to do full motion with stock parts, so it evolved into a "LED photobooth."&lt;/p&gt;  &lt;p&gt;The signs are BetaBrite Prisms, the software is written in c#.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The software is driven by many c# examples derived from the web:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Jeff Atwood's &lt;a href="http://www.codeproject.com/KB/vb/BetaBriteAPI.aspx"&gt;BetaBrite API&lt;/a&gt; ported to c# by &lt;a href="http://www.betterthaneveryone.com"&gt;Clint Rutkas&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://directshownet.sourceforge.net/"&gt;DirectShow&lt;/a&gt; DxSnap example&lt;/li&gt;    &lt;li&gt;All tied together with my code to multiplex and splice images.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421108_3895_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="n4713141_33421108_3895" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421108_3895_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421107_3577_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="n4713141_33421107_3577" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421107_3577_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421109_4218_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="n4713141_33421109_4218" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421109_4218_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421110_4541_4.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="n4713141_33421110_4541" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421110_4541_thumb_1.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421111_4857_4.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="n4713141_33421111_4857" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421111_4857_thumb_1.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421112_5179_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="n4713141_33421112_5179" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421112_5179_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421113_5499_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="n4713141_33421113_5499" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421113_5499_thumb.jpg" width="184" border="0" /&gt;&lt;/a&gt; &lt;a href="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421130_1154_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="n4713141_33421130_1154" src="http://copyandwaste.com/images/copyandwaste_com/WindowsLiveWriter/MakerFaireandwhyIwasbusy_14CB2/n4713141_33421130_1154_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;It was two very long days.&lt;/p&gt;&lt;img src="http://copyandwaste.com/aggbug/26.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Andrew Konkol</dc:creator>
            <guid>http://copyandwaste.com/archive/2008/05/06/maker-faire-and-why-i-was-busy.aspx</guid>
            <pubDate>Wed, 07 May 2008 04:37:29 GMT</pubDate>
            <wfw:comment>http://copyandwaste.com/comments/26.aspx</wfw:comment>
            <comments>http://copyandwaste.com/archive/2008/05/06/maker-faire-and-why-i-was-busy.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://cop