<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/blog/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://www.analysisuk.com/blog/feeds/atom10.xml" rel="self" title="Steve's personal blog" type="application/atom+xml" />
    <link href="http://www.analysisuk.com/blog/"                        rel="alternate"    title="Steve's personal blog" type="text/html" />
    <link href="http://www.analysisuk.com/blog/rss.php?version=2.0"     rel="alternate"    title="Steve's personal blog" type="application/rss+xml" />
    <title type="html">Steve's personal blog</title>
    <subtitle type="html">A blog about what's going on in Analysis UK...</subtitle>
    <icon>http://www.analysisuk.com/blog/templates/default/img/s9y_banner_small.png</icon>
    <id>http://www.analysisuk.com/blog/</id>
    <updated>2008-07-06T23:38:36Z</updated>
    <generator uri="http://www.s9y.org/" version="1.0">Serendipity 1.0 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>

    <entry>
        <link href="http://www.analysisuk.com/blog/archives/40-Build-Indicator-Part-2-The-firmware.html" rel="alternate" title="Build Indicator  Part 2 (The firmware)" />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-07-06T23:38:36Z</published>
        <updated>2008-07-06T23:38:36Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=40</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=40</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/5-General" label="General" term="General" />
    
        <id>http://www.analysisuk.com/blog/archives/40-guid.html</id>
        <title type="html">Build Indicator  Part 2 (The firmware)</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                This is part 2 of the Build Indicator series.  <a href="http://www.analysisuk.com/blog/exit.php?url_id=193&amp;entry_id=40" title="http://www.analysisuk.com/blog/archives/39-Build-Indicators-revisited.html"  onmouseover="window.status='http://www.analysisuk.com/blog/archives/39-Build-Indicators-revisited.html';return true;" onmouseout="window.status='';return true;">Part 1  the construction of the hardware is here</a>.<br />
<br />
The firmware is written using the Arduinos own <a href="http://www.analysisuk.com/blog/exit.php?url_id=194&amp;entry_id=40" title="http://www.arduino.cc/en/Main/Software"  onmouseover="window.status='http://www.arduino.cc/en/Main/Software';return true;" onmouseout="window.status='';return true;">programming language</a> which  is much like C/C++, using the IDE provided its easy to develop the code and push it down to the Arduino.<br />
<br />
I decided that as the Arduino has 13 IO pins it would be a shame not to make these available for 6 build indicators so 6 individual projects could be monitored.  Ive not used OO to implement the code so its a little messy with individual arrays for project status, red and green led pins which are indexed based on the project number.  I think you can create classes but this has to be done in external C++ files so for a simple application like this I didnt worry to add that extra complexity.<br />
<br />
Serial (RS232) communications is used to send a status message down to the Arduino build indicator to update the project status.<br />
<br />
The full Arduino <a href="http://www.analysisuk.com/blog/exit.php?url_id=196&amp;entry_id=40" title="http://www.AnalysisUK.com/Download/BuildIndicator.zip"  onmouseover="window.status='http://www.AnalysisUK.com/Download/BuildIndicator.zip';return true;" onmouseout="window.status='';return true;">build indicator code can be download here</a>.<br />
<br />
License :  Please use, copy and modify this code as you wish, all I ask is that you dont take credit for the bits I wrote.  You should ensure its fit for purpose before using it.<br />
<br />
<strong>Variable declaration</strong> :<br />
<br />
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;&#160;1</span>&#160;<span style="color: green;">/*</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;&#160;2</span>&#160;<span style="color: green;">&#160;<strong> Build Indicator (c) Analysis UK Ltd 2008</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;&#160;3</span>&#160;<span style="color: green;">&#160;*</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;&#160;4</span>&#160;<span style="color: green;">&#160;</strong> Digital Pin Assignments:</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;&#160;5</span>&#160;<span style="color: green;">&#160;<strong> 0 - RX</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;&#160;6</span>&#160;<span style="color: green;">&#160;</strong> 1 - TX</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;&#160;7</span>&#160;<span style="color: green;">&#160;<strong> 2 - Project 6 - Green LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;&#160;8</span>&#160;<span style="color: green;">&#160;</strong> 3 - Project 6 - Red LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;&#160;9</span>&#160;<span style="color: green;">&#160;<strong> 4 - Project 5 - Green LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;10</span>&#160;<span style="color: green;">&#160;</strong> 5 - Project 5 - Red LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;11</span>&#160;<span style="color: green;">&#160;<strong> 6 - Project 4 - Green LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;12</span>&#160;<span style="color: green;">&#160;</strong> 7 - Project 4 - Red LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;13</span>&#160;<span style="color: green;">&#160;<strong> 8 - Project 3 - Green LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;14</span>&#160;<span style="color: green;">&#160;</strong> 9 - Project 3 - Red LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;15</span>&#160;<span style="color: green;">&#160;<strong> 10 - Project 2 - Green LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;16</span>&#160;<span style="color: green;">&#160;</strong> 11 - Project 2 - Red LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;17</span>&#160;<span style="color: green;">&#160;<strong> 12 - Project 1 - Green LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;18</span>&#160;<span style="color: green;">&#160;</strong> 13 - Project 1 - Red LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;19</span>&#160;<span style="color: green;">&#160;*/</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;20</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;21</span>&#160;<span style="color: blue;">#define</span> VERSION "1.0"</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;22</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;23</span>&#160;<span style="color: green;">// Project not enabled of not connected.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;24</span>&#160;<span style="color: blue;">int</span> PROJECT_OFF = 0;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;25</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;26</span>&#160;<span style="color: green;">// Project build failed</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;27</span>&#160;<span style="color: blue;">int</span> PROJECT_FAIL = 1; <span style="color: green;">// 001</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;28</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;29</span>&#160;<span style="color: green;">// Project build good</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;30</span>&#160;<span style="color: blue;">int</span> PROJECT_GOOD = 2; <span style="color: green;">// 010</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;31</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;32</span>&#160;<span style="color: green;">// project building from a failed project.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;33</span>&#160;<span style="color: blue;">int</span> PROJECT_BUILDING_FAIL = 5; <span style="color: green;">// 101</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;34</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;35</span>&#160;<span style="color: green;">// project building from a good build.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;36</span>&#160;<span style="color: blue;">int</span> PROJECT_BUILDING_GOOD = 6; <span style="color: green;">// 110</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;37</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;38</span>&#160;<span style="color: green;">// Maximum number of projects.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;39</span>&#160;<span style="color: blue;">int</span> maxProjects = 6;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;40</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;41</span>&#160;<span style="color: green;">// Project status codes.&#160; Indexed by project.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;42</span>&#160;<span style="color: blue;">int</span> projectStatus[] = {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;43</span>&#160;&#160; 0, 0, 0, 0, 0, 0};</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;44</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;45</span>&#160;<span style="color: green;">// Pins for the Red LEDs.&#160; Indexed by project.&#160; </span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;46</span>&#160;<span style="color: blue;">int</span> redLEDPin[] = {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;47</span>&#160;&#160; 13, 11, 9, 7, 5, 3};</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;48</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;49</span>&#160;<span style="color: green;">// Pins for the Green LEDs.&#160; Indexed by project.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;50</span>&#160;<span style="color: blue;">int</span> greenLEDPin[] = {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;51</span>&#160;&#160; 12, 10, 8, 6, 4, 2}; <span style="color: green;">// pins 0 and 1 reserverd for RS232.</span></p><br />
</div><br />
<br />
<br />
The arrays redLEDPin and greenLEDPin represent the pins to use for the red/green leds and are indexed on the project number (i.e. project 0's red led is on pin 13).  The array projectStatus holds the status of the project and again is indexed by the project number.<br />
<br />
<strong>Setup</strong>:<br />
<br />
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;54</span>&#160;<span style="color: green;">// run once, when the sketch starts</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;55</span>&#160;<span style="color: blue;">void</span> setup()&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;56</span>&#160;{</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;57</span>&#160;&#160; <span style="color: green;">// Initialise the ports for output to drive the LEDs</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;58</span>&#160;&#160; <span style="color: blue;">for</span> (<span style="color: blue;">int</span> i=0; i&lt;maxProjects; i++) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;59</span>&#160;&#160;&#160;&#160; pinMode(greenLEDPin[i], OUTPUT);&#160;&#160;&#160; <span style="color: green;">// sets the digital pin as output for the green/blue part of the tri color LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;60</span>&#160;&#160;&#160;&#160; pinMode(redLEDPin[i], OUTPUT);&#160;&#160;&#160; &#160; <span style="color: green;">// sets the digital pin as output for the red part of the tri color LED</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;61</span>&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;62</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;63</span>&#160;&#160; <span style="color: green;">// Setup Serial communications</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;64</span>&#160;&#160; Serial.begin(57600);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;65</span>&#160;}</p><br />
</div><br />
<br />
The setup method iterates through all the projects setting up the pins designated as leds for output and then sets up serial communications at a baud rate or 57,600.  Fortunately the Arduino takes care of the difficult serial comms bits for us.<br />
<br />
<strong>Main Loop</strong>:<br />
<br />
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;67</span>&#160;<span style="color: green;">// Main loop, runs over and over again</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;68</span>&#160;<span style="color: blue;">void</span> loop()&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;  </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;69</span>&#160;{&#160; </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;70</span>&#160;&#160; <span style="color: green;">// Check and Read settings from PC</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;71</span>&#160;&#160; ReadCommands();</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;72</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;73</span>&#160;&#160; <span style="color: green;">// Update the LED's to indicate project status'</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;74</span>&#160;&#160; UpdateLEDs();</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;75</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;76</span>&#160;&#160; <span style="color: green;">// Idle.&#160;&#160;&#160; &#160;&#160; </span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;77</span>&#160;&#160; Idle();</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;78</span>&#160;}</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;79</span>&#160;</p><br />
</div><br />
<br />
The loop method is the main application loop that the Arduino will enter once setup is complete and will keep repeating.  <br />
<br />
Within loop we call 3 basic methods, ReadCommands() which will check the serial port for commands from the host, UpdateLEDs() which will update the leds based on the project status and Idle() which just inserts a small delay but can be used for other background tasks.<br />
<br />
The comms protocol is a fairly simple one. All messages should start with a byte value of 2 and terminate with a byte value of 3 so the Arduino can easily know when a instruction has been received.<br />
<br />
To update a project status send the ascii string @P[x]=y with x being the project number 1-6 and y being the status (0, 1, 2, 5, 6).  <br />
<br />
To query the version number of the firmware send ?V. <br />
<br />
Ive stolen the comms protocol from another project Im working on with the Arduino that has more commands and queries so Ive based all commands where the Arduino has to do work on the @ character and all queries on the ? character to help separate out the commands and queries.<br />
<br />
<strong>RS232 Message handling</strong>:<br />
<br />
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;86</span>&#160;<span style="color: green;">// Read commands sent from the PC</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;87</span>&#160;<span style="color: blue;">void</span> ReadCommands() </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;88</span>&#160;{</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;89</span>&#160;&#160; <span style="color: green;">// Check if serial data available, if so then read this in</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;90</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;91</span>&#160;&#160; <span style="color: green;">// Read all from the serial port until no more bytes available looking for the</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;92</span>&#160;&#160; <span style="color: green;">// start byte (1) of a message.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;93</span>&#160;&#160; <span style="color: blue;">while</span> (Serial.available()) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;94</span>&#160;&#160;&#160;&#160; <span style="color: green;">//read the incoming byte:</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;95</span>&#160;&#160;&#160;&#160; <span style="color: blue;">int</span> incomingByte = Serial.read();</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;96</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;97</span>&#160;&#160;&#160;&#160; <span style="color: green;">// Start identifier.&#160; STX</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;98</span>&#160;&#160;&#160;&#160; <span style="color: blue;">if</span> (incomingByte == 2) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;&#160;99</span>&#160;&#160;&#160;&#160; &#160; <span style="color: green;">// Found start byte now read in until we get the end of message byte.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;100</span>&#160;&#160;&#160;&#160; &#160; ReadSeialCommand(); </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;101</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">return</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;102</span>&#160;&#160;&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;103</span>&#160;&#160; }&#160; </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;104</span>&#160;}</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;105</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;106</span>&#160;<span style="color: green;">// Read a command from the serial port.&#160; Read until the read byte</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;107</span>&#160;<span style="color: green;">// is an end of message (new line) indicator.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;108</span>&#160;<span style="color: blue;">void</span> ReadSeialCommand() {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;109</span>&#160;&#160; <span style="color: green;">// Expect maximum of 25 bytes (normally 6)</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;110</span>&#160;&#160; <span style="color: blue;">byte</span> buffer[25];</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;111</span>&#160;&#160; <span style="color: blue;">int</span> index=0;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;112</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;113</span>&#160;&#160; <span style="color: blue;">while</span> (<span style="color: blue;">true</span>) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;114</span>&#160;&#160;&#160;&#160; <span style="color: blue;">if</span> (Serial.available()) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;115</span>&#160;&#160;&#160;&#160; &#160; <span style="color: green;">// read the incoming byte:</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;116</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">int</span> incomingByte = Serial.read();</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;117</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;118</span>&#160;&#160;&#160;&#160; &#160; <span style="color: green;">// Terminating byte</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;119</span>&#160;&#160;&#160;&#160; &#160; <span style="color: green;">// Wait for ETX (End of text - transmision)</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;120</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">if</span> (incomingByte==3) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;121</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; ProcessRequest(buffer);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;122</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; <span style="color: blue;">return</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;123</span>&#160;&#160;&#160;&#160; &#160; } </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;124</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">else</span> {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;125</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; buffer[index] = incomingByte;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;126</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; index++;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;127</span>&#160;&#160;&#160;&#160; &#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;128</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;129</span>&#160;&#160;&#160;&#160; &#160; <span style="color: green;">// Check for buffer overflow and give up if it has.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;130</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">if</span> (index&gt;25) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;131</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; Serial.print(<span style="color: #a31515;">"Error:Buffer Overflow.\n\r"</span>);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;132</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; <span style="color: blue;">return</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;133</span>&#160;&#160;&#160;&#160; &#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;134</span>&#160;&#160;&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;135</span>&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;136</span>&#160;}</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;137</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;138</span>&#160;<span style="color: blue;">void</span> ProcessRequest(<span style="color: blue;">byte</span> request[]) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;139</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;140</span>&#160;&#160; boolean processed = <span style="color: blue;">false</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;141</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;142</span>&#160;&#160; <span style="color: green;">// Check for Query commands (? at the start)</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;143</span>&#160;&#160; <span style="color: blue;">if</span> (request[0] == 63) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;144</span>&#160;&#160;&#160;&#160; <span style="color: green;">// Query</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;145</span>&#160;&#160;&#160;&#160; processed = ProcessQuery(request);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;146</span>&#160;&#160; } </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;147</span>&#160;&#160; <span style="color: blue;">else</span> <span style="color: blue;">if</span> (request[0] == 64) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;148</span>&#160;&#160;&#160;&#160; <span style="color: green;">// Set (@P[x]=0) - Set Project x = status.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;149</span>&#160;&#160;&#160;&#160; processed = ProcessSetValue(request);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;150</span>&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;151</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;152</span>&#160;&#160; <span style="color: blue;">if</span> (!processed) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;153</span>&#160;&#160;&#160;&#160; Serial.print (<span style="color: #a31515;">"Error:Unknown Request.\n\r"</span>);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;154</span>&#160;&#160; } </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;155</span>&#160;}</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;156</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;157</span>&#160;boolean ProcessQuery(<span style="color: blue;">byte</span> request[]) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;158</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;159</span>&#160;&#160; boolean processed = <span style="color: blue;">false</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;160</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;161</span>&#160;&#160; <span style="color: blue;">switch</span> (request[1]) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;162</span>&#160;&#160; <span style="color: blue;">case</span> 86: <span style="color: green;">// ?V - version</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;163</span>&#160;&#160;&#160;&#160; processed = SendVersion();</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;164</span>&#160;&#160; <span style="color: blue;">default</span>:</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;165</span>&#160;&#160;&#160;&#160; Serial.print (<span style="color: #a31515;">"Error:Unknown Query.\n\r"</span>);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;166</span>&#160;&#160; }&#160;&#160;&#160; </p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;167</span>&#160;&#160; <span style="color: blue;">return</span> processed;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;168</span>&#160;}</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;169</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;170</span>&#160;boolean ProcessSetValue(<span style="color: blue;">byte</span> request[]) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;171</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;172</span>&#160;&#160; boolean processed = <span style="color: blue;">false</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;173</span>&#160;&#160; <span style="color: blue;">byte</span> command = request[1];</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;174</span>&#160;&#160; <span style="color: green;">// Allow ascii version of the fan number.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;175</span>&#160;&#160; <span style="color: green;">//Position 2 should be [</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;176</span>&#160;&#160; <span style="color: blue;">byte</span> project = request[3] - 48; <span style="color: green;">// 48 = 0</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;177</span>&#160;&#160; <span style="color: green;">//position 4 should be ]</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;178</span>&#160;&#160; <span style="color: green;">//position 5 should be =</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;179</span>&#160;&#160; <span style="color: green;">//position 6 should be the raw value.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;180</span>&#160;&#160; <span style="color: blue;">byte</span> value = request[6];</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;181</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;182</span>&#160;&#160; <span style="color: blue;">switch</span> (command) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;183</span>&#160;&#160; <span style="color: blue;">case</span> 80: <span style="color: green;">//@P[x]=y Set project x status y.&#160; y is ascii version of the status (0-9).&#160; so subtract 48.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;184</span>&#160;&#160;&#160;&#160; processed = SetProjectStatus((<span style="color: blue;">int</span>)project, (<span style="color: blue;">int</span>)value - 48);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;185</span>&#160;&#160;&#160;&#160; <span style="color: blue;">break</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;186</span>&#160;&#160; <span style="color: blue;">default</span>:</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;187</span>&#160;&#160;&#160;&#160; Serial.print (<span style="color: #a31515;">"Error:Unknown set command."</span>);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;188</span>&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;189</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;190</span>&#160;&#160; <span style="color: blue;">return</span> processed;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;191</span>&#160;}</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;192</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;193</span>&#160;boolean SendVersion() {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;194</span>&#160;&#160; Serial.print (<span style="color: #a31515;">"Version="</span>);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;195</span>&#160;&#160; Serial.print (VERSION);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;196</span>&#160;&#160; Serial.print (<span style="color: #a31515;">"\n\r"</span>);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;197</span>&#160;&#160; <span style="color: blue;">return</span> <span style="color: blue;">true</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;198</span>&#160;}</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;199</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;200</span>&#160;<span style="color: green;">// Set the status for the project.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;201</span>&#160;boolean SetProjectStatus(<span style="color: blue;">int</span> project, <span style="color: blue;">int</span> status) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;202</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;203</span>&#160;&#160; <span style="color: blue;">if</span> (projectStatus[project-1] != status) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;204</span>&#160;&#160;&#160;&#160; projectStatus[project-1] = status;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;205</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;206</span>&#160;&#160;&#160;&#160; <span style="color: green;">// Build failed.&#160; Flash the red LED briefly to get attention.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;207</span>&#160;&#160;&#160;&#160; <span style="color: blue;">if</span> (status == 1) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;208</span>&#160;&#160;&#160;&#160; &#160; digitalWrite(greenLEDPin[project-1], LOW);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;209</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;210</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">for</span> (<span style="color: blue;">int</span> i=0; i&lt;6; i++) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;211</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; digitalWrite(redLEDPin[project-1], HIGH);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;212</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; delay(100);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;213</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; digitalWrite(redLEDPin[project-1], LOW);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;214</span>&#160;&#160;&#160;&#160; &#160;&#160;&#160; delay(100);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;215</span>&#160;&#160;&#160;&#160; &#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;216</span>&#160;&#160;&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;217</span>&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;218</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;219</span>&#160;&#160; <span style="color: blue;">return</span> <span style="color: blue;">true</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;220</span>&#160;}</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;221</span>&#160;</p><br />
</div><br />
<br />
The method ReadCommands() will read the input buffer until it receives the start byte then call ReadSerialCommand() which reads the rest of the command into a buffer until it received the end byte.  Ive limited the buffer to 25 bytes which should be plenty and if this overflows then we just abandon it.  Their is no timeout between receiving the start and end bytes so this could cause a problem if the end byte is not received.<br />
<br />
Notice in the method SetProjectStatus() that the project index used is -1 from the project value sent.  When sending commands the first project is project 1 however the Arduino uses 0 based arrays.<br />
<br />
In SetProjectStatus() if the project state changes to be failure (value 1) then the red led is flashed 6 times to draw attention to the indicator.<br />
<br />
<strong>Project State Indication</strong>:<br />
<br />
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;222</span>&#160;boolean UpdateLEDs() {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;223</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;224</span>&#160;&#160; <span style="color: blue;">for</span> (<span style="color: blue;">int</span> i=0; i&lt;maxProjects; i++) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;225</span>&#160;&#160;&#160;&#160; <span style="color: blue;">int</span> greenLEDStatus = LOW;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;226</span>&#160;&#160;&#160;&#160; <span style="color: blue;">int</span> redLEDStatus = LOW;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;227</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;228</span>&#160;&#160;&#160;&#160; <span style="color: blue;">switch</span> (projectStatus[i]) {</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;229</span>&#160;&#160;&#160;&#160; <span style="color: blue;">case</span> 0: <span style="color: green;">// NC</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;230</span>&#160;&#160;&#160;&#160; &#160; <span style="color: green;">// No acton</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;231</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">break</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;232</span>&#160;&#160;&#160;&#160; <span style="color: blue;">case</span> 1: <span style="color: green;">// Fail</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;233</span>&#160;&#160;&#160;&#160; &#160; redLEDStatus = HIGH;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;234</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">break</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;235</span>&#160;&#160;&#160;&#160; <span style="color: blue;">case</span> 2: <span style="color: green;">// Good</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;236</span>&#160;&#160;&#160;&#160; &#160; greenLEDStatus = HIGH;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;237</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">break</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;238</span>&#160;&#160;&#160;&#160; <span style="color: blue;">case</span> 5: <span style="color: green;">// Building from a Fail build</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;239</span>&#160;&#160;&#160;&#160; <span style="color: blue;">case</span> 6: <span style="color: green;">// Building from a good build</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;240</span>&#160;&#160;&#160;&#160; &#160; greenLEDStatus = HIGH;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;241</span>&#160;&#160;&#160;&#160; &#160; redLEDStatus = HIGH;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;242</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">break</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;243</span>&#160;&#160;&#160;&#160; <span style="color: blue;">default</span>:</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;244</span>&#160;&#160;&#160;&#160; &#160; redLEDStatus = HIGH;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;245</span>&#160;&#160;&#160;&#160; &#160; <span style="color: blue;">break</span>;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;246</span>&#160;&#160;&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;247</span>&#160;</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;248</span>&#160;&#160;&#160;&#160; <span style="color: green;">// Determine project LED pins and set them appropriatly.</span></p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;249</span>&#160;&#160;&#160;&#160; digitalWrite(redLEDPin[i], redLEDStatus);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;250</span>&#160;&#160;&#160;&#160; digitalWrite(greenLEDPin[i], greenLEDStatus);</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;251</span>&#160;&#160; }</p><br />
<p style="margin: 0px;"><span style="color: #2b91af;">&#160;&#160;252</span>&#160;}</p><br />
</div><br />
<br />
In the method UpdateLEDs() we update the led status based on the project status.  <br />
<br />
If you are wondering what happened to status codes 3 &amp; 4 Ive used a bit based project status.  0001 (1) is fail, 0010 (2) is good, 01xx is building so 0101 (5) is building from a previously failed state and 0110 (6) is building from a good previous good state.<br />
<br />
If you want to use indicators other than leds for your project state then you can update the UpdateLEDs() method with another way to indicate the project status (maybe a LCD panel?).<br />
<br />
Thats basically the firmware, not much to it, the Arduino does most of the work for us which is the best bit!<br />
<br />
To program the Arduino connect it up, install the drivers (my Vista x64 and Vista x86 installs got the drivers from Windows Update without a problem and also installed the VCP virtual com port drivers).  Open up the IDE, ensure the board and serial port are correct and load the <a href="http://www.analysisuk.com/blog/exit.php?url_id=196&amp;entry_id=40" title="http://www.AnalysisUK.com/Download/BuildIndicator.zip"  onmouseover="window.status='http://www.AnalysisUK.com/Download/BuildIndicator.zip';return true;" onmouseout="window.status='';return true;">build indicator firmware</a>, then hit the upload to I/O board button.  <br />
<br />
In the next entry Ill talk about the PC application to drive the Arduino. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/39-Build-Indicators-revisited.html" rel="alternate" title="Build Indicators revisited" />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-07-03T00:39:08Z</published>
        <updated>2008-07-07T00:10:45Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=39</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=39</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/5-General" label="General" term="General" />
    
        <id>http://www.analysisuk.com/blog/archives/39-guid.html</id>
        <title type="html">Build Indicators revisited</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <img src="http://www.analysisuk.com/blog/uploads/GreenTree.jpg" alt="Arduino controlled X-Mas tree." /><br />
<br />
Some time ago I posted about a <a href=" http://www.analysisuk.com/blog/archives/33-Putting-the-SnowMan-to-work-Cruise-Control-.Net-Build-Status-Monitor..html">USB Snowman build indicator</a>, the problem with the first version was the USB IO board I used, its availability was limited and the output was designed as a current sink rather than source, so some modifications had to be made to the board, which isnt really ideal.<br />
<br />
Recently I came across the Arduino project, an open source hardware solution and one of the little <a href=" http://www.arduino.cc/en/Main/ArduinoBoardDiecimila">Diecimila boards</a> provides a perfect base for revisiting the build indicator.  The SnowMan is still in use at home and I wanted one for work as well so I figured Id make another build indicator based on the Arduino.<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/ArduinoDiecimila.jpg" alt="Arduino Diecimila."/><br />
<br />
The 13 IO pins can sink or source up to 40mA which is ideal for driving the tri-color led used by the build indicator.  The led requires 2 current sources and has a common cathode.  The Arduino has a USB interface that provides normal serial port communications to the host PC so interfacing is easy as well.<br />
<br />
This time instead of a snowman I decided to use a Xmas tree.  They are very similar, basically a lump of plastic with a 5MM LED mounted inside.  The Arduino provides multiple IO ports of which Im using only two and the intention here is to provide some common functionality so that the device could be easily adapted to other forms of build indication (Switching relays, multiple project build indicators, other leds, buzzers etc).<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/XMasTree.jpg" alt="X-Mas tree as new."/><br />
<br />
Removing the base and replacing the led is a simple job, either use a flat screwdriver or use the cable exit to push off the base off. <br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/XMasTreeBase.jpg" alt="X-Mas tree from underneath."/><br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/XMasTreeBaseRemoved.jpg" alt="X-Mas tree base removed."/><br />
<br />
Pull out the led fitted into the tree using the cable.  This is no longer needed.<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/XMasTreeLEDRemoved.jpg" alt="X-Mas tree led removed." /><br />
<br />
Now glue the base onto the top of the box the tree is to be mounted on.  Previously I used a black ABS box but this time Im using a <a href="http://www.analysisuk.com/blog/exit.php?url_id=192&amp;entry_id=39" title="http://www.maplin.co.uk/Module.aspx?ModuleNo=30226&&source=14&doy=Search"  onmouseover="window.status='http://www.maplin.co.uk/Module.aspx?ModuleNo=30226&&source=14&doy=Search';return true;" onmouseout="window.status='';return true;">ice blue box</a> and this has worked out much better for aligning the parts and seeing the leds on the Arduino board (RX/TX when programming), and also appeals to the inner geek a little more now that the workings can be seen.<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/CaseWithBase.jpg" alt="Plastic case with X-Mas tree base glued in place."/><br />
<br />
Drill a hole through the middle of the base so that it will line up with the middle of the x-mas tree.  This is best done with the base stuck to the box as it holds it in place and ensures every thing lines up.  The hole should be about 7-8mm so that the LED + resistors pass thought easily.<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/CaseWithBaseAndHole.jpg" alt="Hole through Xmas tree base and case."/><br />
<br />
Now we need to prepare the led.  Using a standard Tri-Color led (Ive used Red + Green) we need to fit a current limiting resistor to the supply legs.  One for the red and one for the green component of the led.  <br />
<br />
Using the datasheet for the led the voltage drop across the red Led is about 2V, this leaves a drop of 3V across the current limiting resistor as its driven from a 5V source.  Im going to drive the Leds at 30mA, so we will need a 100R resistor for the red Led.  <br />
<br />
The green led has a different voltage drop across it (3.4V) so we need to do the same calculation for that and again aim to drive it at 30mA which means we need a 53R resistor, as I only had a 56R resistor to hand Ive used that which gives us about 29mA current flow.<br />
<br />
The data sheet gives luminous intensity for both red and green at 20mA and the green is much brighter than the red so we may wish at a latter date to play around with the drive current to get a better balance when both red and green are on.<br />
 <br />
Trim the red and green legs of the led fairly short but leave enough to solder on the resistors and attach these.  Next connect a cable to the other side of the resistors and to the common pin on the led.  If you prefer you can attach the resistors to the Arduino connector and solder the cable directly to the led.<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/TriColorLED.jpg" alt="The Tri-color led."/><br />
<br />
I used 2 core screened cable as this happened to be what I had to hand and as it turns out by tinning the screen and soldering to the led common pin gives a good sturdy way to physically push the led into the socket in the tree (and pull it out again!).  I also put a bit of heat shrinking around the connections to prevent them shorting out.<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/LEDConnected.jpg" alt="Led with resistors and wires connected."/><br />
<br />
Now we need the connection to the Arduino board, the led is connected to pins 12, 13 and GND.  This is easy as they are all close together and as an added bonus the Arduino already uses an onboard led on pin 13 for status when starting up which means that the tree flashes when the Arduino is starting up, its easy to use other pins if you prefer.<br />
<br />
Ive used a standard 0.1" Molex connector (The type used for 3 pin PC fans), the PCB version is ideal, but soldering the led connecting wire to the PCB side and plugging it into the header in the Arduino rather than mounting it on a PCB.<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/Connector.jpg" alt="Connector for the led to Arduino controller."/><br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/ConnectingLED.jpg" alt="Led connector plugged into the Arduino." /><br />
<br />
Note that in the photos the red cable is actually for the green led and the blue one is for the red led.  It doesnt really matter a great deal which way round they go as long as you get the correct resistor matched up with the appropriate led.  However the default in the firmware is that the red led is on pin 13 and green on pin 12.<br />
<br />
Next drill some holes in the base of the box and mount the Arduino.  Note that one hole is smaller than the others so I ended up using only 2 mounting points due to my lack of any 2mm bolts.<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/Mounts.jpg" alt="Arduino mounting points."/><br />
<br />
The advantage of using a translucent box is finding the place to drill a hole of the USB connector.  I elected to use a cone drill and just have a circular cut out for the USB cable to go through, it doesnt look all that professional but it was quick and it worked a treat!<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/USBHole.jpg" alt="Hole for the USB connector"/><br />
<br />
Next its just a matter of screwing everything together.<br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/FinalProduct.jpg" alt="X-Mas tree build indicator assembled." /><br />
<br />
<img src="http://www.analysisuk.com/blog/uploads/GreenTreeMounted6.jpg" alt="A Green X-Mas tree." /><br />
<br />
<br />
I put 6 small feet on the base of the box as well.  Why 6?  With sticky feet one always falls off (especially with commercial products!) and then it rocks, with 6 you still have some stability to the device if one falls off.<br />
<br />
Now all thats needed is a little firmware to run the Arduino and some software for the PC to put it to use but thats going to have to be the subject of the next posting(s). 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/38-Recent-Site-Outages.html" rel="alternate" title="Recent Site Outages" />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-06-04T00:56:26Z</published>
        <updated>2008-06-04T00:56:26Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=38</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=38</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/5-General" label="General" term="General" />
    
        <id>http://www.analysisuk.com/blog/archives/38-guid.html</id>
        <title type="html">Recent Site Outages</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Apologies for the recent outages on a number of the Analysis UK websites, these included <a href="http://www.analysisuk.com/blog/exit.php?url_id=184&amp;entry_id=38"  onmouseover="window.status='http://www.BookSwap.ws';return true;" onmouseout="window.status='';return true;"  title="BookSwap.ws">BookSwap.ws</a>, <a href="http://www.analysisuk.com/blog/exit.php?url_id=185&amp;entry_id=38"  onmouseover="window.status='http://www.Dollars2Pounds.com';return true;" onmouseout="window.status='';return true;" title="Dollars 2 Pounds exchange rates">Dollars2Pounds</a>, <a href="http://www.analysisuk.com/blog/exit.php?url_id=186&amp;entry_id=38"  onmouseover="window.status='http://www.Pounds2Euro.com';return true;" onmouseout="window.status='';return true;" title="Pounds to Euros exchange rated">Pounds2Euro</a> and all the other exchange rate sites as well as this blog.<br />
<br />
On Saturday the <a href="http://www.analysisuk.com/blog/exit.php?url_id=188&amp;entry_id=38" title="http://forums.theplanet.com/index.php?showtopic=90185"  onmouseover="window.status='http://forums.theplanet.com/index.php?showtopic=90185';return true;" onmouseout="window.status='';return true;">hosting provider had an explosion and fire at one of it's data centers</a> hosting one of servers.  Initial estimates that were given made it look like it would be quicker to leave the sites (it was a Sunday and their usually quiet on Sundays) and wait for the host to get the power back on.<br />
<br />
Unfortunately it didnt resolve that well, after many hours of delays some power was restored but floor 1 had even more damage than was anticipated and power was much slower at being restored, this unfortunately eat into most of Monday (UK time), however Monday evening all was back and well.<br />
<br />
I got home Tuesday tonight to find yet another apology from the company saying that this time the generator powering floor 1 had failed and they were sourcing a new one, this took a significant amount of time, especially given how much they like to state N+1 redundancy (i.e. a spare generator should have been to hand anyway).  <a href="http://www.analysisuk.com/blog/exit.php?url_id=188&amp;entry_id=38" title="http://forums.theplanet.com/index.php?showtopic=90185"  onmouseover="window.status='http://forums.theplanet.com/index.php?showtopic=90185';return true;" onmouseout="window.status='';return true;">Updates were slow, uninformative, vague and at the point of being misleading</a>  Ive have yet to see any photo's of anything as well.  Eventually power returned at about midnight UK time on Tuesday/Wednesday, so fingers crossed nothing else can go wrong in this world class N+1 redundancy data center!<br />
<br />
Sincere apologies to all those affected, this one is going firmly into the experience category and Im extremely unhappy this has taken so long to resolve, I will look to do more to improve this and hopefully <a href="http://www.analysisuk.com/blog/exit.php?url_id=189&amp;entry_id=38" title="http://www.theplanet.com"  onmouseover="window.status='http://www.theplanet.com';return true;" onmouseout="window.status='';return true;">The Planet</a> will learn and improve (if they have any customers left after this!).<br />
<br />
I read on <a href="http://www.analysisuk.com/blog/exit.php?url_id=190&amp;entry_id=38" title="http://www.GoDaddy.com"  onmouseover="window.status='http://www.GoDaddy.com';return true;" onmouseout="window.status='';return true;">GoDaddy</a> some time ago about a problem they had and that they didnt have geographical redundancy, if your running a serious e-commerce operation and have enough cash for some spare servers get them now and with a different host in a different [part of the] country.  <br />
<br />
BTW - If you have .co.uk domain names with GoDaddy be sure to renew them extra early as they claim they have to renew them at least a month early, then before the 20th of that month (unless I was getting some BS from the customer support as to why they canceled 4 of my domains over 1 month before the renewal date!).<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/36-Mid-May-Madness.html" rel="alternate" title="Mid May Madness" />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-05-17T19:26:00Z</published>
        <updated>2008-05-17T19:26:00Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=36</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=36</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/7-LazyLoad" label="LazyLoad" term="LazyLoad" />
    
        <id>http://www.analysisuk.com/blog/archives/36-guid.html</id>
        <title type="html">Mid May Madness</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Now the summers on its way Im sure you want to be spending less time watching your computer start and more time enjoying the better weather.<br />
<br />
So for a limited time <strong>Ive reduced the price of LazyLoad</strong> from $29.99 to <strong>$9.99</strong>.  Why not take the opportunity to <a href="http://www.analysisuk.com/blog/exit.php?url_id=183&amp;entry_id=36" title="http://www.LazyLoad.com/BuyLazyLoad.aspx"  onmouseover="window.status='http://www.LazyLoad.com/BuyLazyLoad.aspx';return true;" onmouseout="window.status='';return true;">purchase LazyLoad at the special price of $9.99</a> and reduce the amount of time your staring at a computer waiting for it to be usable.<br />
<br />
Ive also introduced some extra purchasing options, for home users a family pack provides a great way to get LazyLoad on every machine in the house, for commercial users Ive added some site license options.<br />
<br />
About 7 months ago I launched <a href="http://www.analysisuk.com/blog/exit.php?url_id=181&amp;entry_id=36" title="http://www.LazyLoad.com"  onmouseover="window.status='http://www.LazyLoad.com';return true;" onmouseout="window.status='';return true;">LazyLoad</a> and at the time I intended to write a short blog post to talk about it.  Well 7 Months latter Im finally getting their, me and blogging just are not getting along.<br />
<br />
LazyLoad is designed to take the strain from you computer whilst it starts.  Simple really!  When you buy a new computer its always nice and quick, then years latter youre reduced to sitting waiting for it to start up and become usable.<br />
<br />
One of the main culprits of the slow start is all the programs that start when Windows starts.  Have a look at your notification area (bottom right of the screen), just how many programs have you got running in the background  lots?  Chances are that each one of these starts when Windows starts.<br />
<br />
What happens when Windows Starts?  Once youve logged in then all of the programs in your Startup folder get started along with those listed in a special part of the Windows registry.  They all get started at about the same time, this becomes a problem as they all need to be loaded from disk, they all need processor time to run, they all need to be put somewhere into the system memory.<br />
<br />
One of the major problems with this becomes the hard disk, to load all the programs the head in the hard disk needs to move to the track the programs stored on and read the data.  At the same time another application is asking for its data from a different area and so the head has to move again to the new location, possible not having completed the first request, so in the end the hard disk is shuffling the head back and forward over the disk to find what it needs.<br />
<br />
To reduce the strain on the hard disk and provide a smoother startup LazyLoad allows you to schedule the loading of your applications a specific time after your computer has started.  By stopping all the applications from loading at once the system is able to concentrate on a few specific tasks and get these done quicker  the net result is your machine becomes usable much earlier.<br />
<br />
LazyLoad is free to try for 30 days so if youve not already tried it then <a href="http://www.analysisuk.com/blog/exit.php?url_id=182&amp;entry_id=36" title="http://www.LazyLoad.com/Download.aspx"  onmouseover="window.status='http://www.LazyLoad.com/Download.aspx';return true;" onmouseout="window.status='';return true;">download a copy</a>.  If you like it then <a href="http://www.analysisuk.com/blog/exit.php?url_id=183&amp;entry_id=36" title="http://www.LazyLoad.com/BuyLazyLoad.aspx"  onmouseover="window.status='http://www.LazyLoad.com/BuyLazyLoad.aspx';return true;" onmouseout="window.status='';return true;">purchase if license</a> whilst its on special offer.<br />
<br />
<br />
<br />
<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/35-Earthquake-in-the-UK!.html" rel="alternate" title="Earthquake  in the UK!" />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-02-27T02:16:51Z</published>
        <updated>2008-02-27T02:16:51Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=35</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=35</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/5-General" label="General" term="General" />
    
        <id>http://www.analysisuk.com/blog/archives/35-guid.html</id>
        <title type="html">Earthquake  in the UK!</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Minor tremors felt here in Cambridge, thought I was going crazy and fired up <a href="http://www.analysisuk.com/blog/exit.php?url_id=178&amp;entry_id=35" title="http://twitter.com"  onmouseover="window.status='http://twitter.com';return true;" onmouseout="window.status='';return true;">Twitter</a> to see other reports, news starting to come through on <a href="http://www.analysisuk.com/blog/exit.php?url_id=175&amp;entry_id=35" title="http://news.sky.com/skynews/article/0,,30100-1307071,00.html"  onmouseover="window.status='http://news.sky.com/skynews/article/0,,30100-1307071,00.html';return true;" onmouseout="window.status='';return true;">sky news</a> sometime after.<br />
<br />
Turns out I wasnt imagining things!  Apparently 4.7 on the Richter scale.<br />
<br />
Unusual to get this in the UK.  Only minor here in Cambridge, like a helicopter flying over the house and the only thing to shake was me and the study lamp!<br />
<br />
Just woken up and want to get your PC fired up quickly to check out <a href="http://www.analysisuk.com/blog/exit.php?url_id=176&amp;entry_id=35" title="http://news.sky.com/"  onmouseover="window.status='http://news.sky.com/';return true;" onmouseout="window.status='';return true;">Sky News</a>, <a href= "http://news.bbc.co.uk/1/hi/england/7266136.stm">BBC News</a> or <a href="http://www.analysisuk.com/blog/exit.php?url_id=178&amp;entry_id=35" title="http://twitter.com"  onmouseover="window.status='http://twitter.com';return true;" onmouseout="window.status='';return true;">Twitter</a>?  Waiting for lots of background applications starting that you dont need and just want to fire up a browser quickly?  Check out <a href="http://www.analysisuk.com/blog/exit.php?url_id=179&amp;entry_id=35" title="http://www.LazyLoad.com"  onmouseover="window.status='http://www.LazyLoad.com';return true;" onmouseout="window.status='';return true;">LazyLoad</a> to delay the stuff you dont need immediately so you can get started sooner.<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/34-Just-for-fun..html" rel="alternate" title="Just for fun." />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-10-30T04:58:17Z</published>
        <updated>2007-10-30T04:58:17Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=34</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=34</wfw:commentRss>
    
    
        <id>http://www.analysisuk.com/blog/archives/34-guid.html</id>
        <title type="html">Just for fun.</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Sometimes you just have to join in the fun.  I read that <a href="http://www.analysisuk.com/blog/exit.php?url_id=172&amp;entry_id=34" title="http://ap.google.com/article/ALeqM5hFzxF7XLwi7Il2DVEE6la0NVo--gD8SAP1MO0"  onmouseover="window.status='http://ap.google.com/article/ALeqM5hFzxF7XLwi7Il2DVEE6la0NVo--gD8SAP1MO0';return true;" onmouseout="window.status='';return true;">Stephen Colbert had announced his candidacy for president</a>, and well I had a <a href="http://www.analysisuk.com/blog/exit.php?url_id=173&amp;entry_id=34" title="http://www.Steve2Win.com"  onmouseover="window.status='http://www.Steve2Win.com';return true;" onmouseout="window.status='';return true;">domain name</a> that wasn't really doing much so I figured I'd join in the fun a little as well.<br />
<br />
So to show my support,<a href=http://www.Steve2Win.com>Steve 2 Win (http://www.Steve2Win.com)</a> has been thrown together and released to the wild, just for fun you understand!  <br />
<br />
BTW - No snowmen were hurt in the production of the website!.<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/33-Putting-the-SnowMan-to-work-Cruise-Control-.Net-Build-Status-Monitor..html" rel="alternate" title="Putting the SnowMan to work : Cruise Control .Net Build Status Monitor." />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-05-07T01:40:29Z</published>
        <updated>2007-05-07T01:40:29Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=33</wfw:comment>
    
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=33</wfw:commentRss>
    
    
        <id>http://www.analysisuk.com/blog/archives/33-guid.html</id>
        <title type="html">Putting the SnowMan to work : Cruise Control .Net Build Status Monitor.</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                So X-Mas has long gone (well at least at the time of writing) and Im left with two issues, first I want to monitor the status of my builds easily, secondly I have some left over USB SnowMen.  <br />
<br />
Their can be only one thing for it.  Time to get the screw driver and glue out and turn the snow man into a build status indicator.  <br />
<br />
Now ideas like this are far from new, Ive read of teams using <a href="http://www.analysisuk.com/blog/exit.php?url_id=164&amp;entry_id=33" title="http://www.pragmaticautomation.com/cgi-bin/pragauto.cgi/Monitor/Devices/BubbleBubbleBuildsInTrouble.rdoc"  onmouseover="window.status='http://www.pragmaticautomation.com/cgi-bin/pragauto.cgi/Monitor/Devices/BubbleBubbleBuildsInTrouble.rdoc';return true;" onmouseout="window.status='';return true;">Lava Lamps to indicate the status of their builds </a> and the latest sources of <a href="http://www.analysisuk.com/blog/exit.php?url_id=165&amp;entry_id=33" title="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET"  onmouseover="window.status='http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET';return true;" onmouseout="window.status='';return true;">CCTray</a> show signs of X10 control, <a href="http://www.analysisuk.com/blog/exit.php?url_id=166&amp;entry_id=33" title="http://www.codinghorror.com"  onmouseover="window.status='http://www.codinghorror.com';return true;" onmouseout="window.status='';return true;">Jeff Atwood</a> covered the subject using a <a href="http://www.analysisuk.com/blog/exit.php?url_id=167&amp;entry_id=33" title="http://www.codinghorror.com/blog/archives/000238.html"  onmouseover="window.status='http://www.codinghorror.com/blog/archives/000238.html';return true;" onmouseout="window.status='';return true;">BetaBrite LED sign</a>, Mike Swanson used an <a href="http://www.analysisuk.com/blog/exit.php?url_id=168&amp;entry_id=33" title="http://blogs.msdn.com/mswanson/articles/169058.aspx"  onmouseover="window.status='http://blogs.msdn.com/mswanson/articles/169058.aspx';return true;" onmouseout="window.status='';return true;">Ambient Orb</a> and Scott Quibell has used the <a href="http://www.analysisuk.com/blog/exit.php?url_id=169&amp;entry_id=33" title="http://blogs.msdn.com/mswanson/archive/2006/07/23/675914.aspx"  onmouseover="window.status='http://blogs.msdn.com/mswanson/archive/2006/07/23/675914.aspx';return true;" onmouseout="window.status='';return true;">Dell XPS Leds</a> as a build monitor.<br />
<br />
So now for my addition to the world of varied build monitors, what else but a color changing snow man!<br />
<br />
A Good build and the snow man is green:<br />
<img src="http://www.analysisuk.com/blog/images/BuildOK.jpg" /><br />
<br />
Building the Application the snowman goes yellowish (Green+Red):<br />
<img src="http://www.analysisuk.com/blog/images/Building.jpg" /><br />
<br />
Failing the build the snowman goes red (Dont mess with an angry snowman!):<br />
<img src="http://www.analysisuk.com/blog/images/BuildBroken.jpg" /><br />
<br />
<br />
This gives a nice feedback on the build status, doesnt require the addition of mains electric (its USB powered), and doesnt rely on X10 which Ive found to be problematic in a work environment due to mains born noise and its a bit of a weird thing so always good as a conversation point.<br />
<br />
The parts required:<br />
<br />
A <href="http://www.google.com/search?q=usb+snowman">USB SnowMan</a> about £6.<br />
<br />
A <a href="http://www.analysisuk.com/blog/exit.php?url_id=170&amp;entry_id=33" title="http://www.pc-control.co.uk/buy_minibee.htm"  onmouseover="window.status='http://www.pc-control.co.uk/buy_minibee.htm';return true;" onmouseout="window.status='';return true;">USB Mini-Bee IO device </a> or something similar that can source 2x 25mA outputs. (£25)<br />
<br />
A small box, <br />
<br />
A <a href="http://www.analysisuk.com/blog/exit.php?url=aHR0cDovL3d3dy5yYXBpZG9ubGluZS5jb20vcHJvZHVjdGluZm8uYXNweD9rdz01Ni0wMzUwJnRpZXIxPUVsZWN0cm9uaWMrQ29tcG9uZW50cyZ0aWVyMj1PcHRvZWxlY3Ryb25pY3MmdGllcjM9NW1tK0xFRHMmdGllcjQ9SGlnaCticmlnaHRuZXNzK3RyaS1jb2xvdXIrNW1tK0xFRCZtb2R1bGVubz03NTE1OCA=&amp;entry_id=33" title="http://www.rapidonline.com/productinfo.aspx?kw=56-0350&tier1=Electronic+Components&tier2=Optoelectronics&tier3=5mm+LEDs&tier4=High+brightness+tri-colour+5mm+LED&moduleno=75158 "  onmouseover="window.status='http://www.rapidonline.com/productinfo.aspx?kw=56-0350&tier1=Electronic+Components&tier2=Optoelectronics&tier3=5mm+LEDs&tier4=High+brightness+tri-colour+5mm+LED&moduleno=75158 ';return true;" onmouseout="window.status='';return true;">Red+Green 5mm TriColor LED </a> (£0.25)<br />
<br />
Some cable and some glue.<br />
<br />
In the next blog posting I will describe construction  (well modification really) of the hardware and the one after that the simple mods to CCTray to kick the snowman into life.<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/32-Pound-breaks-the-2-Dollar-point..html" rel="alternate" title="Pound breaks the 2 Dollar point." />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-04-17T23:41:26Z</published>
        <updated>2007-04-17T23:41:26Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=32</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=32</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/6-Exchange-Rates" label="Exchange Rates" term="Exchange Rates" />
    
        <id>http://www.analysisuk.com/blog/archives/32-guid.html</id>
        <title type="html">Pound breaks the 2 Dollar point.</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Today the Pound has broken the 2 Dollar exchange rate, this is apparently a 15 year high for the Pound against the US Dollar.<br />
<br />
Dont forget if you want to check out the exchange rate on your mobile phone or other mobile devices you can browse to <a href="http://www.analysisuk.com/blog/exit.php?url_id=162&amp;entry_id=32" title="http://www.d2p.mobi"  onmouseover="window.status='http://www.d2p.mobi';return true;" onmouseout="window.status='';return true;">D2P.mobi</a>, Dollars 2 Pounds for your mobile.<br />
<br />
Screen shot from <a href="http://www.analysisuk.com/blog/exit.php?url_id=163&amp;entry_id=32" title="http://www.Dollars2Pounds.com"  onmouseover="window.status='http://www.Dollars2Pounds.com';return true;" onmouseout="window.status='';return true;">Dollars2Pounds</a> showing todays rate above the 2 dollar point:<br />
<br />
<img src="http://www.analysisuk.com/blog/images/2DollarPound1.jpg"><br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/31-Pound-touches-14-year-high-against-US-Dollar.html" rel="alternate" title="Pound touches 14 year high against US Dollar" />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-04-17T02:19:59Z</published>
        <updated>2007-04-17T02:19:59Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=31</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=31</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/6-Exchange-Rates" label="Exchange Rates" term="Exchange Rates" />
    
        <id>http://www.analysisuk.com/blog/archives/31-guid.html</id>
        <title type="html">Pound touches 14 year high against US Dollar</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                The BBC is <a href="http://www.analysisuk.com/blog/exit.php?url_id=159&amp;entry_id=31" title="http://news.bbc.co.uk/1/hi/business/6562071.stm"  onmouseover="window.status='http://news.bbc.co.uk/1/hi/business/6562071.stm';return true;" onmouseout="window.status='';return true;">reporting that the Pound reached a 14 year high against the US Dollar during Monday</a>.<br />
<br />
I dont have 14 years worth of data in the <a href="http://www.analysisuk.com/blog/exit.php?url_id=160&amp;entry_id=31" title="http://www.Dollars2Pounds.com"  onmouseover="window.status='http://www.Dollars2Pounds.com';return true;" onmouseout="window.status='';return true;">Dollars2Pounds</a> exchange rate database, but heres a chart of what the last 5 years looks like.<br />
<br />
(Apologies for the Y axis label problem, Excel has decided not to allow me to show the full label  I have no idea why, Ive tried allsorts).<br />
<br />
<img src="http://www.analysisuk.com/blog/images/D2P-5Y-20070416.JPG" /><br />
<br />
I'm currently working on adding charting to Dollars2Pounds.com, however this is in a big queue with lots of other things I need to be working on so isnt happening as quickly as I would like  its also reliant on me finding a charting package that I like, and Ive not had much luck so far.<br />
<br />
If you want to play with a chart in Excel your self you can use <a href="http://www.analysisuk.com/blog/exit.php?url_id=161&amp;entry_id=31" title="http://www.dollars2pounds.com/RatesHistory.php"  onmouseover="window.status='http://www.dollars2pounds.com/RatesHistory.php';return true;" onmouseout="window.status='';return true;">Dollars 2 Pounds exchange rate history</a> page and Excels Web Query.<br />
<br />
From Excel select :<br />
Data -> Import External Data -> New Web Query<br />
<br />
In the Window that opens enter the Rates History URL.<br />
(http://www.dollars2pounds.com/RatesHistory.php?Base=USD&To=GBP&Days=60)<br />
<br />
<img src="http://www.analysisuk.com/blog/images/WebQuery.JPG" /><br />
<br />
Select the arrow pointing to the date title of the rates table, it should turn to a tick<br />
<br />
<img src="http://www.analysisuk.com/blog/images/WebQuery2.JPG" /><br />
<br />
Click on Import, select where to import the data to in the Import Data window and wait whilst Excel gets the data.<br />
<br />
Your spreadsheet should now look something like:<br />
<br />
<img src="http://www.analysisuk.com/blog/images/WebQuery3.JPG" /><br />
<br />
<br />
Now, if like me your in the UK, its a great time to buy software, components, domain names and the like from US sources as everythings practically half price!.<br />
<br />
Please remember the actual exchange rates you receive from your credit card, money transfer or other currency conversion will differ from the rates published, please check the rate offered by the company converting your currency first and remember that conversions are an approximate indication only and cannot be guaranteed by Analysis UK.<br />
<br />
<br />
<br />
<br />
<br />
<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/30-Implementing-GTD-SOP-2-with-the-help-of-Dinner-Timer-Lite..html" rel="alternate" title="Implementing GTD SOP #2 with the help of Dinner Timer Lite." />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-04-17T00:00:16Z</published>
        <updated>2007-04-17T00:00:16Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=30</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=30</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/4-MicroISV" label="MicroISV" term="MicroISV" />
    
        <id>http://www.analysisuk.com/blog/archives/30-guid.html</id>
        <title type="html">Implementing GTD SOP #2 with the help of Dinner Timer Lite.</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Once again Bob has a fantastic suggestion to help us get things done on his <a href="http://www.analysisuk.com/blog/exit.php?url_id=152&amp;entry_id=30" title="http://www.ToDoOrElse.com"  onmouseover="window.status='http://www.ToDoOrElse.com';return true;" onmouseout="window.status='';return true;">ToDoOrElse.com blog</a>, the basics of GTD SOP #2 are that you spend 48 minutes working with an allowance of 12 minutes slack time every hour (although Im hoping this doesnt apply to 24 hours a day  although it sure feels like it sometimes!).<br />
<br />
Every now and then I find another use for Dinner Timer Lite.  Today is no exception, with some very simple modifications to the settings Dinner Timer Lite makes a great timer for <a href="http://www.analysisuk.com/blog/exit.php?url_id=153&amp;entry_id=30" title="http://www.todoorelse.com/2007/03/gtd_sop2_48_min.html"  onmouseover="window.status='http://www.todoorelse.com/2007/03/gtd_sop2_48_min.html';return true;" onmouseout="window.status='';return true;">GTD SOP #2</a> (IMHO!) - not to mention that <a href="http://www.analysisuk.com/blog/exit.php?url_id=154&amp;entry_id=30" title="http://www.bookswap.ws/Content/findonamazonus-Asin-B0007Q6NI0.html"  onmouseover="window.status='http://www.bookswap.ws/Content/findonamazonus-Asin-B0007Q6NI0.html';return true;" onmouseout="window.status='';return true;">the timer</a> Bob recommends is out of stock at <a href="http://www.analysisuk.com/blog/exit.php?url_id=155&amp;entry_id=30" title="http://www.Amazon.com"  onmouseover="window.status='http://www.Amazon.com';return true;" onmouseout="window.status='';return true;">Amazon.com</a> as I type this and Dinner Timer Lite is available as a <a href="http://www.analysisuk.com/blog/exit.php?url_id=156&amp;entry_id=30" title="http://www.dinnertimer.com/download.aspx"  onmouseover="window.status='http://www.dinnertimer.com/download.aspx';return true;" onmouseout="window.status='';return true;">free download</a>!<br />
<br />
<a href="http://www.analysisuk.com/blog/exit.php?url_id=157&amp;entry_id=30" title="http://www.DinnerTimer.com"  onmouseover="window.status='http://www.DinnerTimer.com';return true;" onmouseout="window.status='';return true;">Dinner Timer Lite</a> is a free PC based timer originally intended to help me reduce the number of meals I burnt because I returned to the PC to work and forgot to set the timer in the kitchen or when I did it went off and I kept working thinking I would just do another 30 seconds when it was really 5 minutes extra.<br />
 <br />
<h3>Configuring Dinner Timer Lite for GTD SOP #2 </h3><br />
<br />
From the main menu choose Settings -> Options.<br />
<br />
On the General Options tab set the following:<br />
<br />
Default timer run time : 60 min.<br />
End point close warning time : 12 min.<br />
Over end point first warning time : 4 min. (or as you feel appropriate)<br />
Secondary over end point warning : 8 min. (again as you feel appropriate)<br />
Stop all notifiers after end point: 10 min.<br />
<br />
<img src="http://www.analysisuk.com/blog/images/GTDSOP2-1.JPG"/><br />
<br />
That has set up the timer to run for 60 minutes by default, warning me 12 minutes before the hour is up (i.e. 48 minutes after the start), then again warning me at the end of the hour, combined with two possible over run warnings at 4 and 8 minutes in case I keep slacking!  as if that would happen! and a stop at 10 minutes in case I have  wandered away from the PC.<br />
<br />
Naturally when you are working you dont want to be clock watching but you might just want to see how long till you get some slack and at the same time its good when your slacking to see how long you have left so lets setup the opacity of the timer.<br />
<br />
<img src="http://www.analysisuk.com/blog/images/GTDSOP2-2.JPG"/><br />
<br />
The settings here are :<br />
Timer stopped : high visibility.<br />
Timer running : Low visibility.<br />
48 Minutes up : good visibility.<br />
Time up : high visibility.<br />
Over run slacking : full visibility.<br />
<br />
<br />
<h3>Getting notified:</h3><br />
<br />
The current release version of Dinner Timer Lite features 2 styles of notification (future versions have some more notifiers currently being written).<br />
<br />
Here are how I have configured Dinner Timer Lite : <br />
<br />
Select both bubble and sound notifiers on the notifiers tab.<br />
<br />
<img src="http://www.analysisuk.com/blog/images/GTDSOP2-3.JPG"/><br />
<br />
Click Bubble Notifier then the Edit Settings button to open the options for the bubble notifier.<br />
<br />
<img src="http://www.analysisuk.com/blog/images/GTDSOP2-4.JPG"/><br />
<br />
<br />
From the top drop down box work your way through the various options, setting the Action as Run Once or Dont Run where you dont want a bubble to appear.<br />
<br />
The text will appear in a bubble pop up from the system tray area when the appropriate event occurs.<br />
<br />
Started : "Timer started"<br />
Stopped : "Timer stopped"<br />
EndPointClose: "Slack Time, you now have 12 mins slack time to surf and make a cup of Tea!" (This event is the one set to occur 12 minutes before your hour is up).<br />
<br />
<img src="http://www.analysisuk.com/blog/images/GTDSOP2-5.JPG"/><br />
<br />
EndPoint: "Time to get back to work  remember to restart Dinner Time Lite" (occurs when the 60 minutes is up).<br />
EndPointMissed1: "Stop slacking and get back to work"<br />
EndPointMissed2: "Thats enough slacking you won't get anything done"<br />
<br />
Naturally you may wish to change the messages for ones that are a little more motivational (or polite)!<br />
<br />
Next set up the sound notifiers in a similar way.  I would suggest you use a sound on the start event so you know for sure that the volume is working when you start the timer!<br />
<br />
When setting the sounds use the Run Once or Run Twice Action options otherwise the sound will keep going until you stop and that would likely ruin your 12 minutes of slack time!<br />
<br />
<img src="http://www.analysisuk.com/blog/images/GTDSOP2-6.JPG"/><br />
<br />
You can choose your own sounds if you dont like any of the built in ones, they were chosen to get attention. <a href="http://www.analysisuk.com/blog/exit.php?url_id=158&amp;entry_id=30" title="http://www.soundrangers.com"  onmouseover="window.status='http://www.soundrangers.com';return true;" onmouseout="window.status='';return true;">Sound Rangers</a> is a great site to get a variety of sound effects from.<br />
<br />
If you dont want sound notification or bubble pop up then unselect that notifier.<br />
<br />
NB: sound configuration and notifier selection changes only takes effect when the application is restarted for Version 1.0<br />
<br />
Thats it for configuration of Dinner Timer Lite, next lets put it to use.<br />
<br />
<h3>Using Dinner Timer Lite:</h3><br />
<br />
Returning to the main window we see the 60 min default value in the drop down in the menu strip.  If you want to work longer (or shorter) change the time here, but you will still only get 12 minutes slack time (sorry!)<br />
<br />
<img src="http://www.analysisuk.com/blog/images/GTDSOP2-7.JPG"/><br />
<br />
When you are ready to start working hit the Start button.<br />
<br />
<img src="http://www.analysisuk.com/blog/images/GTDSOP2-8.JPG"/><br />
<br />
The timer updates to show the time remaining, the start and completion times and how long the timer is running for, as well as a progress bar showing oddly enough the progress through the hour.<br />
<br />
The timer also updates its transparency to the low visibility state (not shown in the screen shot), clicking on the minimize button sends Dinner Timer Lite to the tray, hover over it to get the time remaining for the hour.  When its slack time we get prompted with a balloon from the system tray and some weird noise from the speakers, then when its time to get back to work more balloons and noises! <br />
<br />
When youve finished your slack and are ready to start back remember to hit Stop and then Start again to start the next hour.  And if you were slacking more than you should have been the timer keeps counting past the hour so you know how much work you skipped.<br />
<br />
<h3>Cooking dinner whilst working.</h3><br />
<br />
Naturally if you are like me and stick some food in the oven and return to the computer to get a bit more work (ok, slack) done then just start up another Dinner Timer Lite and set the timer to run for how long your food needs cooking whilst the other GTD SOP #2 timer is running, however be warned that the settings will now be to warn you 12 minutes before dinner is ready as the settings are global.<br />
<br />
<br />
<h3>Other uses of Dinner Timer Lite?</h3><br />
If you have found Dinner Timer Lite useful for timing something that you thing others would also benefit from then drop me a line, post a comment or something and I will look to add details about it and see if some simple improvements to Dinner Timer Lite can make it a better product.<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/29-Demon-regrade-fiasco-Day-34.html" rel="alternate" title="Demon regrade fiasco : Day 34" />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-04-16T23:45:17Z</published>
        <updated>2007-04-16T23:45:17Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=29</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=29</wfw:commentRss>
    
    
        <id>http://www.analysisuk.com/blog/archives/29-guid.html</id>
        <title type="html">Demon regrade fiasco : Day 34</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Today I received a very nice and apologetic letter from Demon in response to my complaint I sent them on Day 16.  The letter basically stated that my comments have been noted and my suggestions will be considered along with a lot of the usual reasoning for the FUP.<br />
<br />
One thing that gets me is I still dont see how the implementation that Demon have taken for the FUP will work.  Its measured over 30 days, so month 1 you download everything in site, get all your Amazon unboxed downloads, update your Napster tracks, catch up with the latest updates on C4s broadband download and BBC 2s downloads, Sky by broadband so on and so forth and you can easily go well over the download limit, I get the impression I could just leave the PC on downloading day and night on my 6Meg (should I say, up to 8Meg) connection, then next month you get capped so you spend the month doing little and picking up your email, follow that with the month after then you could hammer the connection again.<br />
<br />
Now if I was to do that the FUP would work for every other month but be completely pointless for the high bandwidth months.  Now granted the FUP worked for me and got me onto a more expensive account as Im sure it will have done for a lot of others, but this package is three times the regular package so Im sure lots of people will save their downloads for every other month and rack up high bandwidth usage then, how is that going to help Demons other customers who share the exchange?  I dont think it is.  If it was capped after the FUP limit for the rest of the month that would have a much more helpful impact on the other customers.  Anyway, Im sure it will all sort its self out.<br />
<br />
Now just to help matters, not only did It take a total of 17 days from the date I ordered the regrade but had I have been a new customer I would have got a free modem and free installation and it would probably have been done a lot quicker, however because Im a loyal Demon customer I got no modem and a £40 bill for the pleasure  Demon you sure do know how to rub salt into a wound!<br />
<br />
OK, now hopefully thats all behind me and I can get on with business and surfing, lets just hope I have no reason to contact customer support!<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/28-Demon-regrade-fiasco-Day-17.html" rel="alternate" title="Demon regrade fiasco : Day 17" />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-03-30T00:24:03Z</published>
        <updated>2007-03-30T00:24:03Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=28</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=28</wfw:commentRss>
    
    
        <id>http://www.analysisuk.com/blog/archives/28-guid.html</id>
        <title type="html">Demon regrade fiasco : Day 17</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                So this morning I again phoned Demon support, initially they claimed I had regarded from Home Office to Business then back to Home Office again, however that got resolved quickly and I was told my account was a Business account, so I guess it was just the dedicated Business broadband support line that was wrong yesterday evening.<br />
<br />
This time I was told that the cap would be removed from the account within the next 12 hours, this was at 11am, at 11pm the cap would be lifted for the day anyway so I thought that I wouldnt really not know until the next day, so they might just as well have given me another one of the 24 hours brush offs.<br />
<br />
Amazingly enough today the cap appears to have been lifted, I guess I must now be a proper business class customer, few what a relief!!!  <br />
<br />
Two other important things happened today as far as Demon go, I send a letter of complaint to their head office and I got a letter from them saying how sorry they were that I was closing my old dial up account, which I moved away from 4-5 years ago! Now thats efficiency!!! (note hint of sarcasm).<br />
<br />
The more observant may have noticed that Ive included Saturdays and Sundays in my Day numbers, when Demon tell you a regrade will take 10 days thats 10 working  you have to read the small print, I think this is quite deceptive really 10 doesnt sound to bad, just a bit more than a week but when you think about it really its 2 weeks, 14 REAL days, naturally 10 days sounds better.  <br />
<br />
I guess its only fair to say that when I post a book the confirmation email says 1-2 working days, thats because the delivery people dont work Sundays but I do explicitly state working days.<br />
<br />
Maybe if you are a business youre probably not to bothered about weekends, but for consumers and people like myself, both a consumer and micro ISV weekends are very important so 14 days (2 weeks) is really the number you have to think off and all of a sudden that sounds a lot longer. (something like 40% longer).  I guess the only time its useful is if you order on a Saturday or Sunday then its actually 12-14 real days, I cant help think being up front and saying 2 weeks would be better.<br />
<br />
Now all I have to wonder is why it took 17 (real) days to sort this out when it was just a regrade, the line was already there, from what I can tell BT had their bit nailed in 2-3 days, so that leaves 14 days of pen pushing I guess.  It does make me wonder if I hadnt done anything how long this would have taken to resolve.<br />
<br />
I only have a few concerns left, hopeful the cap removal wasnt just a temp thing today and wont reset its self tomorrow, hopefully in 30 days time Demons computer wont automatically decide it doesnt know Im a business customer and recap me/<br />
<br />
My biggest concern however is that nothing else will happen to my line that requires Demon customer support to do anything because Im not actually sure they are capable of doing anything to support their customers (or at least in a reasonable efficient manner) and for this reason alone I have to consider Demon unsuitable as a Business broadband provider and inadequate as a home Broadband provider.<br />
<br />
Hopefully this will be the last you will hear of me complaining about Demon, if its not then Im likely to need to be in a padded cell as this has just been such a frustrating experience its driven me crazy every day.<br />
<br />
<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/27-Demon-Business-Broadband-is-totally-unsuitable-for-Business-and-Consumers..html" rel="alternate" title="Demon [Business] Broadband is totally unsuitable for Business and Consumers." />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-03-29T01:59:40Z</published>
        <updated>2007-03-29T01:59:40Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=27</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=27</wfw:commentRss>
    
    
        <id>http://www.analysisuk.com/blog/archives/27-guid.html</id>
        <title type="html">Demon [Business] Broadband is totally unsuitable for Business and Consumers.</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <strong>The Short version:</strong><br />
<br />
If you or your business requires a good reliable internet provider Demon are the last people you should consider.  For more than a week now I have been repeatedly fobbed off by their customer support staff who tell me to wait 24-48 hours then my regrade should be sorted but alas I am still stuck with a heavily throttled internet connection. <br />
<br />
Often I have reason to believe they (Demon support) have ignored my request for help and just got me off the line by telling me it would be sorted in 24-48 hours.  As far as I can tell little to no action has been taken to resolve my problems by Demon customer support.  Frequently I am told one thing then the next time I call this gets totally contradicted.<br />
<br />
Day 1 : Order faxed to Demon at about 2am.<br />
<br />
Day 3 : About now the line got upgraded by BT, FUP cap in place.<br />
<br />
Day 7 : Received email stating that the regrade was complete.  Not true.<br />
<br />
Day 7 : According to a letter from Demon my new FUP cap starts now (19 March) until 19 April.<br />
<br />
Day 8 : Contacted support to check the regrade status, told 24-48 hours.<br />
<br />
Day 9 : Contacted support to check the regrade status, told 24-48 hours.<br />
<br />
Day 11 : Contacted support to check the regrade status, told 24 hours.<br />
<br />
Day 12 : Contacted support to check the regrade status, told 24 hours.<br />
<br />
Day 13 : Clocks changed at 2am.  FUP cap now stays until 11pm not 10pm as stated by Demon in their communications.<br />
<br />
Day 14 : (Monday 26 March) Spoke to a supervisor at Demon customer support who assured me he would have the regrade sorted and the regrade would be done in 24-48 hours, however he failed to email me as requested to confirm this.<br />
<br />
Day 15 : Contacted support, told 24 hours and account would be Business account, Informed them of the time change issue effecting the end time of the cap.<br />
<br />
Day 16 am: Told regrade completed on Day 15 (27th) and account was now Business Broadband account.<br />
<br />
Day 16 pm: FUP cap still in place and told account was Home Office not Business as told in the morning, also told that FUP cap is in place until 11pm and not 10pm as Demon communications state, I guess they make it up as they go along!<br />
<br />
<br />
<strong>How it started:</strong><br />
My recent problems with Demon started back in January, having just had the x-mas break I had spent quite a bit of time on the internet and had unknowingly exceeded my bandwidth allocation which had recently been introduced by Demon.<br />
<br />
The first I realised was when my internet access was giving me 11K download speed instead of the previous 200k+ I had been use to, I contact customer support who were unable to tell me the reason, I initially thought their was a problem with the line, at 10pm this problem went away until the next day, I then again phone Demon customer support who told me that I had exceeded the bandwidth allowance and my line was capped from 9am till 10pm at 128k for a month.  A few days latter I got a letter to tell me that I had exceeded the fair usage policy and my bandwidth would be capped for 30 days.<br />
<br />
I naturally enquired how I could check my bandwidth usage, there is no online way to tell, you have to phone demon support and they will tell you, hardly friendly!  Also unlike some companies there is no way to buy extra bandwidth, if you want to use your line during the peak times you have no choice but to struggle, and struggle you will as at these speeds broadband does not work well.  If in a period of 30 days you exceed your allowance then the next month you have the cap, not the remaining time during the 30 days. <br />
<br />
The following month I cut back my usage but not enough, I was less than 10% over my allowance and I had my 30 day cap imposed.  Fortunately for me at this time most of my internet usage is during the late evening and weekend.  Again during February I was about 10% over my usage allowance so I find my self in March having a 7day/week 9am till 10pm cap, actually as at writing the cap is in place till 11pm because the clocks that govern the cap have not been updated for the day light savings change.  Tonight (28 March) I spoke with Demon support who told me the cap was in place until 11pm, however the letter I have from Demon support clearly states 10pm, they tell you one thing but do another!<br />
<br />
At this point I felt I had only two options, clearly I was never going to meet the limits of the home office package I could switch provider which I felt would be problematic and possible leave me unconnected or as an existing customer I thought I could simply send Demon more money and regrade my account to a full Business account.<br />
<br />
I chose the regrade, what a mistake.  A word to the wise : DONT DO IT!<br />
<br />
<strong>The Regrade:</strong><br />
When requesting a regrade (upgrade) of my account from their home office to the Business Broadband I was sent a lengthy order form intended for new customers, this I should have realised was a clear sign that they cared little for existing customers, here I am wishing to spend more cash (the order is worth over <a href="http://www.analysisuk.com/blog/exit.php?url=aHR0cDovL3d3dy5Eb2xsYXJzMlBvdW5kcy5jb20vQ29udmVydGVyL0N1cnJlbmN5Q29udmVydGVyLnBocD9CYXNlPUdCUCZBbW91bnQ9NzAwIA==&amp;entry_id=27" title="http://www.Dollars2Pounds.com/Converter/CurrencyConverter.php?Base=GBP&Amount=700 "  onmouseover="window.status='http://www.Dollars2Pounds.com/Converter/CurrencyConverter.php?Base=GBP&Amount=700 ';return true;" onmouseout="window.status='';return true;">£700</a>) with this company you would think they would make it easy to do that, new customers are difficult to find, existing ones who wish to pay more are free!<br />
<br />
Another sign that you are not dealing with a company that cares about its customer is the 12 month lock in the contract requires.  If you find a good supplier you are happy with then you dont change, clearly Demon feel the need to prevent you escaping, why, well if I had the choice I would drop my Demon account right this minute because of the shoddy service, but they have me for 12 more months.<br />
<br />
During the very early hours of Tuesday 13 March 2007 (Day 1) I faxed back my order form, with it I send an email to the sales person letting them know I had done this in case I had not sent it properly.<br />
<br />
Yes yes yes, I said faxed back, as an existing customer (or even for new customers) you can not use the internet to order an upgrade from Demon for your broadband, I really dont think Demon have figured out how to use the Internet (they still post  the invoices (annually when they bill monthly), no email with a pdf attached invoice like a lot of companies manage to do).<br />
<br />
Now I was told this would take 10 days because of BT having to reassign the line.  A few days latter my internet connection was showing signs of being reassigned, I had the full 800k+ upload speed showing in my connection details, I was very pleased, however it soon became apparent I still had the fair usage cap applied.  I have been told by Demon support that it is not possible to apply the FUP to a business line so I knew something was wrong, I contacted them to discuss this and was told they were just sorting out the billing and my account would become a Business account at that point.<br />
<br />
On Monday 19 Match 2007 (Day 7), 6 days after my order I received an email from Demon ADSL Support stating We are delighted to confirm that your regrate is now complete.  However it was far from complete.  I again contacted Demon support, I was told that they were just waiting for billing to complete then my account would be a Business Broadband account and this should be 24-48 hours.  They offered no explanation how I had received an email stating that the regrade was complete.<br />
<br />
I waited 48 hours, on the morning of Day 9 (Wednesday) I phoned again to be told it would be 24-48 hours, Ive phoned every day since then to be told 24 hours.  Ive been told a variety of different dates for when things have happened following on from my support queries which makes me realise that when I was told that they would fix the issue and it would be done in 24 hours they didnt actually do anything.<br />
<br />
I phoned Demon customer support on Monday (Day 14) and spoke with a supervisor there, I was assured that the problem would be fixed in 24-48 hours, I also asked for him to send me a confirmation email.  2 working days latter (Day 16) since that conversation I have no email and still the FUP is in place.  I phoned support in the morning to be told the regrade was complete and my account was showing as a business account, however they couldnt explain why the FUP cap was still in place and that I should phone back in 2 hours to get a progress report.<br />
<br />
I was unable to phone back at the time and phoned latter on in the evening, about 8pm after the real customer support line had closed.  I was told my account was a Home Office 8000 account, which is a direct contradiction to what I was told earlier.<br />
<br />
Now I have to wait till the morning of Day 17 to phone Demon customer support (they only work 9 to 5 or 8 to 8 or something, not the advertised 24 hours Demon would have you believe, the people that do the 24 hour support appear to be their just to say hello, get your account number and have you phone back in the morning, they have never managed to be any help, so take the 24 support with a huge pinch of salt).<br />
<br />
<strong>My Advice for potential Demon customers:</strong><br />
Do you like to gamble?  If you have 1 phone line, if you are dependent on a good connection then you will take a massive gamble if you opt for Demon, avoid these idiots, they dont care about you and they dont want to help you.<br />
<br />
Read the contract, you have to give them a fixed 12 months, they have the ability to change things as they see fit, changes mean the 12 month lock in resets, however they make no promises to what they will supply you with.  No >99% uptime, no commitment to support you, nothing, nada. <strong>AVOID!</strong><br />
<br />
<strong>My Advice for Demon customers:</strong><br />
Simple, at the earliest chance stop being a Demon customer!<br />
You should start by moving away from your Demon email, this is something that you will loose when you stop having Demon as your BB provider and is a great way to lock in customers, get your own domain name which has email provided with it, or use gmail or similar, avoid the demon mail, if you use Demon email then you already know how little control you have over the anti spam system and its quite good at rejecting legitimate emails.<br />
<br />
Dont even bother attempting a regrade, thats just a recipe for disaster and another 12 month lock in.  Shop around for other BB providers, consider your bandwidth usage for the next 12 months, will you be a heavy user of the Sky, C4 , BBC2 or google videos or Amazon UnBox download services, these will use lots of bandwidth and Demon will make you suffer and remember some of the new applications use P2P technologies meaning you will (most likely without knowing) be uploading parts of the movie you downloaded to help balance the distribution, bye bye more bandwidth.<br />
<br />
I have been a Demon customer for about 8-10 years now, I had previously been happy with them but unfortunately they have gone into the ground.  This I feel is such a shame.<br />
<br />
It goes without saying this has been an incredible stressful experience, getting up in the morning to speak with a Demon person knowing I would be told to call back in 24 hours, knowing nothing would actually be done, knowing they couldnt care less about me.  We dont need companies like this, Demon pack up shop or learn to respect your customers.<br />
<br />
When I <a href="http://www.analysisuk.com/blog/exit.php?url_id=149&amp;entry_id=27" title="http://www.BookSwap.ws"  onmouseover="window.status='http://www.BookSwap.ws';return true;" onmouseout="window.status='';return true;">sell a book</a> I get the notification in the evening after my day job, the book is in the post to my customer the next day and usually delivered the day after  this goes down very well, its not difficult, I find the book, print the labels, print the packing slip, package it up (throwing in a couple of book marks), print a stamp and next day drop it in the post.  Demon has no physical thing to deal with, a few key strokes and that should be it, how can an order for a better package where I give them more money drag on all messed up for 16+ Days.<br />
<br />
Apparently I am not alone, others are <a href="http://www.analysisuk.com/blog/exit.php?url_id=150&amp;entry_id=27" title="http://www.peat.me.uk/2006/03/02/what-has-gone-wrong-with-demon-internet/"  onmouseover="window.status='http://www.peat.me.uk/2006/03/02/what-has-gone-wrong-with-demon-internet/';return true;" onmouseout="window.status='';return true;">suffering at the hands of Demon Internet</a>.  The reg also recently reported on problems with supposed <a href="http://www.analysisuk.com/blog/exit.php?url_id=151&amp;entry_id=27" title="http://www.theregister.co.uk/2007/03/27/fair_use_petition/"  onmouseover="window.status='http://www.theregister.co.uk/2007/03/27/fair_use_petition/';return true;" onmouseout="window.status='';return true;">unlimited broadband claims.</a>, have a read and sigh the Number 10 partition, Unlimited is not limited.  FUP Limitations on bandwidth mean bandwidth limitations, which is not unlimited, its not rocket science.<br />
<br />
<br />
<em>All views expressed are my personal views and not that of Analysis UK Ltd.</em><br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/26-Heli-Fun..html" rel="alternate" title="Heli Fun." />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2006-11-19T19:08:03Z</published>
        <updated>2006-11-19T19:08:03Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=26</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=26</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/5-General" label="General" term="General" />
    
        <id>http://www.analysisuk.com/blog/archives/26-guid.html</id>
        <title type="html">Heli Fun.</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Some weeks ago I (and three others at my day job) purchased a <a href="http://www.analysisuk.com/blog/exit.php?url_id=145&amp;entry_id=26" title="http://www.buzzflyer.co.uk/Special-Offers/ESky-Lama-V3-Helicopter/p-92-126/"  onmouseover="window.status='http://www.buzzflyer.co.uk/Special-Offers/ESky-Lama-V3-Helicopter/p-92-126/';return true;" onmouseout="window.status='';return true;">ESky Lama V3 Helicopter</a>, if you are thinking about trying remote control helicopters then this one is just so much fun you should go for it!<br />
<br />
This is one strong and fun helicopter, you are best off flying indoors, in an area with some reasonable space and nothing valuable around.  The battery charge lasts about 10 minutes but that seams like a long time and whilst you are learning to fly most of the time you will be picking the heli off its side and placing it back in a position you can fly it from.<br />
<br />
I have repeatedly crashed the Lama and its incredibly strong, so far Im on my second set of blades (both A and B !), fortunately it comes with a spare set in the box and Im also on my second tail, this didnt come as a spare but only cost about £8.<br />
<br />
<a href="http://www.analysisuk.com/blog/exit.php?url_id=146&amp;entry_id=26" title="http://www.buzzflyer.co.uk"  onmouseover="window.status='http://www.buzzflyer.co.uk';return true;" onmouseout="window.status='';return true;">BuzzFlyer</a> do a great range of <a href="http://www.analysisuk.com/blog/exit.php?url_id=147&amp;entry_id=26" title="http://www.buzzflyer.co.uk/Electric-RC-Helicopter-Spares-Parts/ESky-Lama-2--V3-Spares/c-1-72-87/"  onmouseover="window.status='http://www.buzzflyer.co.uk/Electric-RC-Helicopter-Spares-Parts/ESky-Lama-2--V3-Spares/c-1-72-87/';return true;" onmouseout="window.status='';return true;">spare parts for the V3 Lama</a> and with their being 4 of us at work I just see what every body else needs and do a big-ish order which helps with the postage.<br />
<br />
Various connectors for the blades, balance thingy and what not take some serious grief but these just pop back into place without to many problems, I expected these to be the first things to break but they have done amazingly well.  Just moments ago I hit the ceiling with the heli, which landed badly on the sofa, the balance hammer on the top came out and was actually bent, but all connectors are in one piece and I was back flying again 20 seconds latter.<br />
<br />
The Tail broke some time ago and was a similar crash, I was trying to back away from the window when I got it all wrong and the heli came down backwards from the ceiling and hit the rowing machine on its way, so no great surprise the plastic tail broke!  This was easy to replace, just 4 small screws.<br />
<br />
If you are looking for a fun present for someone this x-mas then look seriously at the LAMA, I put some serious thought into the purchase and wasnt sure if Id done the right thing, until I started flying it, then it instantly became my favourite toy!<br />
<br />
Unfortunately the manuals not to hot for getting started, but its quite simple.  Switch on the remote control handset, set the throttle (left hand lever + trim) all the way down, place the Lama on a flat surface, plug in the battery, dont touch it until you see the red flashing led go solid green.  Pick up the controls and start flying.  You will need to adjust the trims and these change with battery charge, I find getting it a few inches from the ground to get the coarse adjustment then fly it properly and you can then get an idea of the fine adjustment.<br />
<br />
One big tip I was given and I would suggest the same, keep it pointing away from you, it gets very confusing working back to front and the Lama reaches the scene of the accident very quickly normally but if you have the controls back to front you end up making it even quicker!<br />
<br />
There are some good RC forums around with more tips on flying the Lama.<br />
<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.analysisuk.com/blog/archives/25-ESWC-2006-Day-1.html" rel="alternate" title="ESWC 2006 Day 1" />
        <author>
            <name>Stephen Harrison</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2006-11-05T00:41:35Z</published>
        <updated>2006-11-05T00:41:35Z</updated>
        <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=25</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=25</wfw:commentRss>
    
            <category scheme="http://www.analysisuk.com/blog/categories/4-MicroISV" label="MicroISV" term="MicroISV" />
    
        <id>http://www.analysisuk.com/blog/archives/25-guid.html</id>
        <title type="html">ESWC 2006 Day 1</title>
        <content type="xhtml" xml:base="http://www.analysisuk.com/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Well here I am trying to focus on the screen to give a summary of day one from the European ShareWare Conference 2006 here in Cambridge although very tired at present so the spelling and grammar are probably going to be even worse than usual.<br />
<br />
Well first of all if you were at the conference then Hi and if not, well shame on you as you are missing a very interesting and informative conference.<br />
<br />
This is the first one of these Ive been to so I was unsure as to what I should be expecting, how many people would be their and all that.  Numbers were good today, a nice big turn out but no to large that it was difficult to see/hear, although given this is a Europe conference then I guess that actually very few of the micro ISVs/ShareWare authors have come along.<br />
<br />
I think calling it a ShareWare conference is selling it a bit short as today covered SEO, email marketing and goggle adwords which were really interesting to me for both my web based products (<a href="http://www.analysisuk.com/blog/exit.php?url_id=138&amp;entry_id=25" title="http://www.Dollars2Pounds.com"  onmouseover="window.status='http://www.Dollars2Pounds.com';return true;" onmouseout="window.status='';return true;">Dollars to Pounds exchange rates</a> and <a href="http://www.analysisuk.com/blog/exit.php?url_id=139&amp;entry_id=25" title="http://www.BookSwap.ws"  onmouseover="window.status='http://www.BookSwap.ws';return true;" onmouseout="window.status='';return true;">BookSwap.ws</a>) as well as windows applications (i.e. <a href="http://www.analysisuk.com/blog/exit.php?url_id=140&amp;entry_id=25" title="http://www.DinnerTimer.com"  onmouseover="window.status='http://www.DinnerTimer.com';return true;" onmouseout="window.status='';return true;">Dinner Timer for timing your cooking</a>), where "ShareWare" tends to conger up the thoughts of a standalone application that installed on your computer.<br />
<br />
All the talks from today were very interesting, some to know as background and to be aware of for future developments and others for here and now.  <br />
<br />
I was pleasantly surprised by Thomas Wetzels talk of Grow your Google Adwords account successfully, Ive used Adwords for some time now and whilst Im no expert I did think I understood a fair amount.  I learnt a lot from Thomas talk, not least about his <a href="http://www.analysisuk.com/blog/exit.php?url_id=141&amp;entry_id=25" title="http://www.adwordsreporter.com"  onmouseover="window.status='http://www.adwordsreporter.com';return true;" onmouseout="window.status='';return true;">analytics tool for adword tracking</a> which Ive downloaded already and Im about to go and play with.  I also learnt that Im not alone by loosing money with adwords, although to be fair I did expect this from the way I have it configured and how I want to attract customers. <br />
<br />
I was also very impressed by the presentation Sinan Karace from <a href="http://www.analysisuk.com/blog/exit.php?url_id=142&amp;entry_id=25" title="http://www.InstallAware.com"  onmouseover="window.status='http://www.InstallAware.com';return true;" onmouseout="window.status='';return true;">InstallAware</a>.  Installers are the first thing your customers get to see of the product for windows applications and its critical for the success of the product that it goes better than just OK.  At other companies Ive worked at Ive purchased the well known installer that is a competitor to InstallAware, which I ended up having to use to create installers for the applications I had written and I have to say how much I hate that other companies installer application and upgrade pricing!.  InstallAwares product looks really good, having written installers I know its no stroll in the path and to see the examples and the flexibility of the InstallAware product I was impressed.  I shall be downloading that very soon and running it through its paces, their pricing also looks very impressive and a much more friendly upgrade policy!<br />
<br />
I couldnt end the post without mentioning <a href="http://www.analysisuk.com/blog/exit.php?url_id=143&amp;entry_id=25" title="http://mymicroisv.com/"  onmouseover="window.status='http://mymicroisv.com/';return true;" onmouseout="window.status='';return true;">Bob Walsh of My MicroISV</a> and author of <a href= "http://www.bookswap.ws/Content/SearchResults.php?Keyword=Micro+ISV&IncludeAmazonCOM=1&IncludeAmazonUK=1" >Micro ISV, From Vision to Reality</a> of which I am half way through, this is a great book, full of useful links and interesting interviews.  Anyway, it was great to see him talk in person, and very interesting as well.  You may also want to check channel 9 as their are a couple of interviews with him under the micro ISV section (sorry no link, it's a nightmare to navigate channel 9, maybe I'll post the links in my next post when I have a little more time).<br />
<br />
Im looking forward to Sundays presentations, although dreading the 9am start, I mean, a 9am start on a Saturday and Sunday Im a night person and this is one major shock to the system!<br />
 
            </div>
        </content>
        
    </entry>

</feed>