<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkQMQHo9eSp7ImA9WhRUFks.&quot;"><id>tag:blogger.com,1999:blog-8598704</id><updated>2012-01-27T11:39:41.461Z</updated><category term="MonitorWang" /><category term="Python" /><category term="tools" /><category term="DDVT" /><category term="IoC" /><category term="Windsor" /><category term="gadgets" /><category term="ESB" /><category term="roundup" /><category term="deployment" /><category term="AppEngine" /><category term="LogParser" /><category term="fluentgeoapi" /><category term="deploymentwang" /><category term="GoogleSets" /><category term="CI" /><category term="Geckoboard" /><category term="WCFServiceWrapper" /><category term="software design" /><category term="blog" /><category term="API" /><category term="type 1 online stores" /><category term="DataWang" /><category term="Business" /><category term="C#" /><category term="GeckoboardApps" /><category term="Code Generation" /><category term="Xml" /><category term="geolocation" /><category term="Dev-How-To-Links" /><category term="NuGet" /><category term="WCF" /><category term="recommended" /><category term="amazon" /><category term="user interface" /><category term="business agility" /><category term="Virtual Machines" /><category term="Sidewinder" /><category term="windows media" /><category term="fun" /><category term="productivity" /><category term="richmansplaything" /><category term="Wolfpack" /><category term="Home Automation" /><category term="FreeAgent" /><category term="News" /><category term="google" /><title>James Simmonds</title><subtitle type="html">Random thoughts on software development &amp;amp; the interweb, home automation, media centres &amp;amp; gadgets and other interesting stuff...well interesting to me anyway</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://jimblogdog.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>140</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/JamesSimmonds" /><feedburner:info uri="jamessimmonds" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEQCRXsyfCp7ImA9WhdaFkw.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-5081831115285477215</id><published>2011-10-26T08:06:00.000Z</published><updated>2011-10-26T08:06:04.594Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T08:06:04.594Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IoC" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>My ideal Bootstrapper...</title><content type="html">I like the Bootstrapper codeplex project - it's a nice clean approach to setting up your application....however...&lt;br /&gt;
&lt;br /&gt;
I have a specific requirement to satisfy as part of my bootstrap process and I'm not sure if Bootstrapper can solve it. I'll be honest I thought it easier to write this post as I wanted to talk about my ideal Bootstrapper as well as someone hopefully telling me if Bootstrapper can do this or not!.&lt;br /&gt;
&lt;br /&gt;
Lets say I have an IoC container that needs configuring - easily done with Bootstrapper.&lt;br /&gt;
I also have some components that need running once to perform some one-time registration. These components require some configuration values from the config file (app/web.config). Bootstrapper provides the IStartupTask interface to allow components to perform this - sweet.&lt;br /&gt;
&lt;br /&gt;
I can just make a call to ConfigurationManager in my IStartupTask component(s) to pick up the relevant appSettings right?&lt;br /&gt;
&lt;br /&gt;
Wrong - this sucks....appSettings suck period as they are&amp;nbsp;insidious&amp;nbsp;dependencies that will break your code left right and centre if you don't know what they are. They have a place in the top level application but in "components" that could be used anywhere in the software stack? No, big no. The only way to understand where they are used is to search the code for ".AppSetting" - but what if they are in an assembly you don't have the code at hand to - well you keep trying to run it until you have smoked out all the settings! Bonkers!&lt;br /&gt;
&lt;br /&gt;
What I want is for the IStartupTask components to take a configuration object in the contructor - this makes it explicit and breaks the horrid appSettings dependency.....but....these constructor parameters will only be injected if the IStartupTasks are resolved through my IoC container (giving it a chance to do the injection).&lt;br /&gt;
&lt;br /&gt;
So my ideal Bootstrapper sequence is this....&lt;br /&gt;
&lt;br /&gt;
Initialise the IoC container&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Perform automatic programmatic registration (find all container registry/setup components and execute them).&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Process Xml config files &amp;nbsp;(this is where we would register our configuration components).&lt;br /&gt;
Scan for all IStartupTask implementations and load them into the Container&lt;br /&gt;
ResolveAll&lt;istartuptask&gt; components from the container and execute them - this would ensure any ctor dependencies would be injected thus providing our configuration values.&lt;/istartuptask&gt;&lt;br /&gt;
&lt;br /&gt;
I think I can write an extension method to the Bootstrapper to do this but it would be locked to the IoC container (there is no generic reference to get hold of ANY container used?) - not terrible though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;istartuptask&gt;The key would be to introduce a "common service locator" wrapper over your IoC container in order for Bootstrapper to by able to add all IStartupTasks to the container and then perform a "ResolveAll&lt;istartuptask&gt;"&lt;/istartuptask&gt;&lt;/istartuptask&gt;&lt;br /&gt;
&lt;div&gt;&lt;istartuptask&gt;&lt;br /&gt;
&lt;/istartuptask&gt;&lt;/div&gt;&lt;div&gt;&lt;istartuptask&gt;...hmmmm, that's a lot of work just to eradicate appSetting references! Are they so bad if they are used just in the IStartupTask components? - These startup components are unlikely to be used anywhere else in the code/stack....&lt;/istartuptask&gt;&lt;/div&gt;&lt;div&gt;&lt;istartuptask&gt;&lt;br /&gt;
&lt;/istartuptask&gt;&lt;/div&gt;&lt;div&gt;Your thoughts?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-5081831115285477215?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yIz1pA3RbGa2R8imxrY0NZp83kg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yIz1pA3RbGa2R8imxrY0NZp83kg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yIz1pA3RbGa2R8imxrY0NZp83kg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yIz1pA3RbGa2R8imxrY0NZp83kg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/debP1GfmWcs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/5081831115285477215/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=5081831115285477215" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/5081831115285477215?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/5081831115285477215?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/debP1GfmWcs/my-ideal-bootstrapper.html" title="My ideal Bootstrapper..." /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/10/my-ideal-bootstrapper.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QAQH47eyp7ImA9WhdbFUU.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-2626818054420601463</id><published>2011-10-14T09:42:00.000Z</published><updated>2011-10-14T09:42:21.003Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-14T09:42:21.003Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="deployment" /><category scheme="http://www.blogger.com/atom/ns#" term="productivity" /><category scheme="http://www.blogger.com/atom/ns#" term="Wolfpack" /><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><category scheme="http://www.blogger.com/atom/ns#" term="MonitorWang" /><title>Deployment - the final (.Net) frontier</title><content type="html">Another day, another project and deployment raises its head...&lt;br /&gt;
&lt;br /&gt;
Thinking that this problem must have been cracked by now I had a look around the .Net landscape and found two interesting solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.octopusdeploy.com/"&gt;Octopus Deploy&lt;/a&gt; - a .Net convention based deployment system using NuGet packages, loosely based on AppHarbour's approach.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/chucknorris/dropkick"&gt;DropkicK&lt;/a&gt; (aka DK) - another awesome initiative from Dru Sellers et al.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
I like the simplicity of Octopus but also like DK's &amp;nbsp;fluent code based deployment.&lt;br /&gt;
&lt;br /&gt;
Hmmm, this has got me thinking - Wolkpack could easily be adapted to be used as a deployment agent.&lt;br /&gt;
&lt;br /&gt;
Wolfpack can already monitor a NuGet feed for new package releases and currently sends an alert if a new version of a package is detected; a small modification would enable it to&amp;nbsp;instead&amp;nbsp;pull down and install the package. The package format would be NuGet and it would use DK to do the "install" (included in the package itself, Tools folder with some convention to find the DK deployment implementation dlls).&lt;br /&gt;
&lt;br /&gt;
You would create a NuGet feed per environment you need to deploy to. Each target machine would be running Wolfpack (akin to an Octopus "Tentacle") which would be configured to monitor the associated (correct environment) NuGet feed. "Deployment" would simply consist of publishing the package to the feed, from this point on it would be automated by Wolfpack, detect, download, deploy -&amp;gt; after which Wolfpack would publish an alert to let you know what the outcome was (success/fail) plus some stats.&lt;br /&gt;
&lt;br /&gt;
Would I ever build this Wolfpack feature? I dunno, lets see...it's not a lot of code and it would give me an excuse to really play with DropkicK!&lt;br /&gt;
&lt;br /&gt;
Anyone interested in a deployment mashup with Wolfpack + NuGet + DropkicK?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-2626818054420601463?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8QKLATyhWDetdyUVQ9T3FFSKi8g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8QKLATyhWDetdyUVQ9T3FFSKi8g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8QKLATyhWDetdyUVQ9T3FFSKi8g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8QKLATyhWDetdyUVQ9T3FFSKi8g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/8H_zWHiPJ1A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/2626818054420601463/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=2626818054420601463" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/2626818054420601463?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/2626818054420601463?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/8H_zWHiPJ1A/deployment-final-net-frontier.html" title="Deployment - the final (.Net) frontier" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/10/deployment-final-net-frontier.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UBQ3s6cCp7ImA9WhdXGUo.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-2697258270219113331</id><published>2011-09-02T14:54:00.000Z</published><updated>2011-09-02T14:54:12.518Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-02T14:54:12.518Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sidewinder" /><category scheme="http://www.blogger.com/atom/ns#" term="Wolfpack" /><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><title>Wolfpack vNext = vExcited</title><content type="html">I'm getting excited about the next release of Wolfpack (v2.3). It's going to be the first application &amp;nbsp;that uses &lt;a href="http://bit.ly/qV1QvP"&gt;Sidewinder&lt;/a&gt;&amp;nbsp;(unless someone beats me to it with my own framework!).&lt;br /&gt;
&lt;br /&gt;
I'd been discussing updates and NuGet with a few people and wondered how it could be applied to Wolfpack - its plugin architecture makes it a perfect candidate for being able to download or upgrade plugins plus I also wanted to explore a better way of upgrading the entire install - make this as painless as possible.&lt;br /&gt;
&lt;br /&gt;
Taking inspiration from the NuGet.exe commandline app that self updates I had a look at the code and took the plunge and created Sidewinder. I'll let you investigate Sidewinder yourself (if it sounds interesting) but wanted to share what this will mean when it lands in the next version of Wolfpack and how I plan to use it.&lt;br /&gt;
&lt;br /&gt;
Wolfpack is a pluggable, modular system - a number of contrib projects have sprung up and a few dedicated individuals have invested time and effort into adding to the HealthCheck and Publisher plugins available (Thanks guys!). Sidewinder, harnessing NuGet will bring application update to your Wolfpack installation but also provides it with the ability to pull down new plugins and deploy them into your Wolfpack installation folder (including any configuration files required).&lt;br /&gt;
&lt;br /&gt;
Updating your Wolfpack install will be as simple as running...&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Wolfpack.Agent.exe /update&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
That's it - the entire installation will be updated if a new version has been published. Your configuration files will not be updated, only new configuration files will be installed - existing ones will remain unchanged and will need manual update if changed (I'm working on a mechanism to allow the update to make changes as part of the install).&lt;br /&gt;
&lt;br /&gt;
Wolfpack vNext is also taking the first steps towards a more modular system. Feedback has highlighted that the system contains lots of functionality, AppStats, BuildAnalytics, NServiceBus, WCF, Growl, Geckoboard and it would be good to split these away from a "Core" system - making these optional sub-systems that you use if required/suitable for you. I've fragmented the configuration files and started to look at turning these areas of Wolkpack into separate packages to be delivered via Sidewinder. I am also refactoring the Wolfpack.Contrib components into new NuGet packages that can be delivered with Sidewinder...they will be the first plugin test pilot packages for Wolfpack/Sidewinder!&lt;br /&gt;
&lt;br /&gt;
Finally Wolfpack vNext has got some other improvements including...&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Logging improvements to it's startup code it make it easier to debug/understand/fix configuration issues.&lt;/li&gt;
&lt;li&gt;New HealthCheck - Host (ICMP) Ping&lt;/li&gt;
&lt;li&gt;Ability to load HealthCheck components directly into the IoC container (this makes DI into the check possible now)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;A really cool new feature developed by Phil Bolduc is a Powershell HealthCheck - this health check can execute a powershell script to perform any tests/checks you need - this is in beta and will be delivered after vNext as an optional package like this.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Wolfpack vNext will be appearing in a NuGet gallery near your very soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-2697258270219113331?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pm-aJinS1jaYRkM-2RyR6Cw2uMs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pm-aJinS1jaYRkM-2RyR6Cw2uMs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pm-aJinS1jaYRkM-2RyR6Cw2uMs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pm-aJinS1jaYRkM-2RyR6Cw2uMs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/toIGqKF9Ijg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/2697258270219113331/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=2697258270219113331" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/2697258270219113331?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/2697258270219113331?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/toIGqKF9Ijg/wolfpack-vnext-vexcited.html" title="Wolfpack vNext = vExcited" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/09/wolfpack-vnext-vexcited.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04ARXw9fSp7ImA9WhZaEkk.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-5511525959997390710</id><published>2011-06-28T07:25:00.000Z</published><updated>2011-06-28T07:25:44.265Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-28T07:25:44.265Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="productivity" /><category scheme="http://www.blogger.com/atom/ns#" term="Wolfpack" /><category scheme="http://www.blogger.com/atom/ns#" term="MonitorWang" /><category scheme="http://www.blogger.com/atom/ns#" term="Geckoboard" /><title>Wolfpack v2.1 (Build Analytics)</title><content type="html">Hurrah! &lt;a href="http://bit.ly/ma2WVV"&gt;Version 2.1 of Wolfpack&lt;/a&gt; (formally MonitorWang) is released!&lt;br /&gt;
&lt;br /&gt;
This release is all about "&lt;a href="http://bit.ly/kWGwXA"&gt;Build Analytics&lt;/a&gt;" - a new set of plugins allow you to monitor the state of a TeamCity build configuration and then once this is complete it can extract stats from any* build tool run as part of it.&lt;br /&gt;
&lt;br /&gt;
* When I say any I mean it supports NCover, SpecFlow, StoryQ reports but as usual with Wolfpack it is easy to create your own parsers to extract from any tool you might use, eg: NDepends, FxCop. It is also simple to extend it to cover other build systems like TFS, CruiseControl.&lt;br /&gt;
&lt;br /&gt;
The final piece of the puzzle of to visualise this information and the Wolfpack Geckoboard Data Service does a great job of this - it allows you to display these stats directly in your &lt;a href="http://www.geckoboard.com/"&gt;Geckoboard&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-xsqK5S6Ylsg/TgmBYMw3MEI/AAAAAAAAAPU/r9DGGRsgzkY/s1600/buildanalytics.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="http://1.bp.blogspot.com/-xsqK5S6Ylsg/TgmBYMw3MEI/AAAAAAAAAPU/r9DGGRsgzkY/s400/buildanalytics.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-QZ7D9pdeSos/TgmBd0mgRYI/AAAAAAAAAPY/K3VvX-4kiSM/s1600/buildanalytics-meter.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="193" src="http://3.bp.blogspot.com/-QZ7D9pdeSos/TgmBd0mgRYI/AAAAAAAAAPY/K3VvX-4kiSM/s200/buildanalytics-meter.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-5511525959997390710?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F50RYXZEjlx6KMxPBvKCEzg70Y8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F50RYXZEjlx6KMxPBvKCEzg70Y8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F50RYXZEjlx6KMxPBvKCEzg70Y8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F50RYXZEjlx6KMxPBvKCEzg70Y8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/HqTT7sik5JI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/5511525959997390710/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=5511525959997390710" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/5511525959997390710?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/5511525959997390710?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/HqTT7sik5JI/wolfpack-v21-build-analytics.html" title="Wolfpack v2.1 (Build Analytics)" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-xsqK5S6Ylsg/TgmBYMw3MEI/AAAAAAAAAPU/r9DGGRsgzkY/s72-c/buildanalytics.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/06/wolfpack-v21-build-analytics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cDQnY-eip7ImA9WhZWGEQ.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-6896968841572671511</id><published>2011-05-20T11:31:00.000Z</published><updated>2011-05-20T11:31:13.852Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-20T11:31:13.852Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="productivity" /><category scheme="http://www.blogger.com/atom/ns#" term="MonitorWang" /><title>Developers have Friday "playtime"?</title><content type="html">I've observed an interesting trend from my download statistics on my main open source project, &lt;a href="http://monitorwang.codeplex.com/"&gt;MonitorWang&lt;/a&gt;...that downloads often increase on a Friday.&lt;br /&gt;
&lt;br /&gt;
What can we infer from this?&lt;br /&gt;
&lt;br /&gt;
Developers have some down time to look at "other" stuff on Friday? Interesting to know how official this is or just people getting bored with the humdrum stuff and looking for something interesting to do at the end of the week?&lt;br /&gt;
&lt;br /&gt;
MonitorWang's official birthday is 8th August when I first uploaded it to codeplex however it was in conception &amp;amp; development way before that so it's almost a year old. It's racked up over 1000 downloads and I've got some big plans for it to be revealed shortly. More importantly I'm starting to get feedback and success stories of it in use which is the icing on the cake - 1000 downloads means nothing if it's not of value to someone!&lt;br /&gt;
&lt;br /&gt;
Thanks to everyone that has helped shape &amp;amp; contribute to it, in particular Rob Gibbens and David Strickland. I've hopefully got some case studies of it being put to use to illustrate further how it can form a valuable piece of your software/ops process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-6896968841572671511?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B02NdwJkpJJWOYR0Ls3VXdXx6Xk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B02NdwJkpJJWOYR0Ls3VXdXx6Xk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B02NdwJkpJJWOYR0Ls3VXdXx6Xk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B02NdwJkpJJWOYR0Ls3VXdXx6Xk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/FEkWZxhLnzc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/6896968841572671511/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=6896968841572671511" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/6896968841572671511?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/6896968841572671511?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/FEkWZxhLnzc/developers-have-friday-playtime.html" title="Developers have Friday &quot;playtime&quot;?" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/05/developers-have-friday-playtime.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcHRnw7eCp7ImA9WhZWEUg.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-194062586067627579</id><published>2011-05-11T22:30:00.000Z</published><updated>2011-05-11T22:30:37.200Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-11T22:30:37.200Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MonitorWang" /><title>MonitorWang v1.0.8 released</title><content type="html">It's taken a while to get this one out - mainly due to a combination of sunny weather and a series of Bank Holidays (and the odd beer festival!).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://monitorwang.codeplex.com/releases/view/63030"&gt;MonitorWang v1.0.8&lt;/a&gt; is released!&lt;br /&gt;
&lt;br /&gt;
This is a big release - several bug fixes and rebuilds against the latest 3rd party libraries, Magnum, TopShelf and NServiceBus plus a major new feature - &lt;a href="http://monitorwang.codeplex.com/wikipage?title=AppStats"&gt;AppStats&lt;/a&gt;&amp;nbsp;(all the details here including the Etsy inspiration behind it).&lt;br /&gt;
&lt;br /&gt;
Comments and feedback welcome (via the codeplex discussions page)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-194062586067627579?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DBu8Qc2S_RlyflhBlidIiDf7Nm8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DBu8Qc2S_RlyflhBlidIiDf7Nm8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DBu8Qc2S_RlyflhBlidIiDf7Nm8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DBu8Qc2S_RlyflhBlidIiDf7Nm8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/8e_8tzSXUuw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/194062586067627579/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=194062586067627579" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/194062586067627579?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/194062586067627579?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/8e_8tzSXUuw/monitorwang-v108-released.html" title="MonitorWang v1.0.8 released" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/05/monitorwang-v108-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcNRH48eSp7ImA9WhZQEU8.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-8266852752540452511</id><published>2011-04-18T10:38:00.000Z</published><updated>2011-04-18T10:38:15.071Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-18T10:38:15.071Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="richmansplaything" /><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><title>Rich and mad?</title><content type="html">...then you need a &lt;a href="http://bit.ly/fSz2D7"&gt;FlyNano&lt;/a&gt; in your toy garage (to compliment your &lt;a href="http://bit.ly/f9f1VX"&gt;Seabreacher X&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-8266852752540452511?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_sSX_2bbv_WHddZkWZF2_1cXkLc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_sSX_2bbv_WHddZkWZF2_1cXkLc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_sSX_2bbv_WHddZkWZF2_1cXkLc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_sSX_2bbv_WHddZkWZF2_1cXkLc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/Gt_HbDzLliY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/8266852752540452511/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=8266852752540452511" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/8266852752540452511?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/8266852752540452511?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/Gt_HbDzLliY/rich-and-mad.html" title="Rich and mad?" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/04/rich-and-mad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYMQHwzeCp7ImA9WhZSFEQ.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-7282767712241935557</id><published>2011-03-30T13:53:00.000Z</published><updated>2011-03-30T13:53:01.280Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-30T13:53:01.280Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="productivity" /><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><category scheme="http://www.blogger.com/atom/ns#" term="roundup" /><category scheme="http://www.blogger.com/atom/ns#" term="MonitorWang" /><category scheme="http://www.blogger.com/atom/ns#" term="recommended" /><title>Spring Roundup</title><content type="html">&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://podio.com/"&gt;Podio&lt;/a&gt;&amp;nbsp;- currently being wowed by this web application. It's a highly customisable collaborative "space" for your team to manage there activities. Essentially you create a "space" then populate it with the apps (widgets) that have the greatest affinity with what your "space" is about. So if you were collaborating on a new website then you will use apps from the software development pack (suite of apps) but you can mix and match apps from any category to provide a completely customised environment to manage your work &amp;amp; team with. This concept is excellent as I've used many "management" type sites, must notably (and well known) being Basecamp and found it good but not great - its suitability &amp;amp; popularity varied between project/client - with Podio you can tune the environment to ensure that you only have the features you need and even better you can create your own apps if there is nothing suitable available; I've not tried this feature yet but think it's the ultimate feature!&amp;nbsp;Great user support from the guys there too - very responsive and from the fairly small amount of time I've spent with it so far (I'm running a new project from it) it's been a robust and good quality application but performance can be a little slow, something I think the team there are working on though.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Summary: Highly recommend this if you aren't 100% happy with your current project management tools, well worth a testdrive! (free plan/signup)&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://www.nextiteration.de/SourceMeet/Home"&gt;Source Meet&lt;/a&gt;&amp;nbsp;(via -&amp;nbsp;&lt;a href="http://coolthingoftheday.blogspot.com/2011/03/good-to-meet-you-source-and-you-source.html"&gt;Greg's Cool [Insert Clever Name] of the Day&lt;/a&gt;) - this looks great! I'm interested in this as I've started to get contributors on my OSS project&amp;nbsp;&lt;a href="http://monitorwang.codeplex.com/"&gt;MonitorWang&lt;/a&gt;&amp;nbsp;and this tool looks just the job for some remote pair programming and idea shaping.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;"&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Source Meet&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22px;"&gt;&amp;nbsp;enables software developers to directly and quickly view and edit source code together, wherever they are and in the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22px;"&gt;&lt;a class="mb" href="http://www.nextiteration.de/images/screenshots/section1-03.jpg" id="A1" rel="type:jpg" runat="server" style="color: #d75600; font-family: Arial, Helvetica, sans-serif; text-decoration: none;" title="Integration into Visual Studio™"&gt;development environment they are familiar with&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22px;"&gt;. Not only all of the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22px;"&gt;&lt;a class="mb" href="http://www.nextiteration.de/images/screenshots/section4-04.jpg" id="A4" rel="type:jpg" runat="server" style="color: #d75600; font-family: Arial, Helvetica, sans-serif; text-decoration: none;" title="Source Meeting with opened editor"&gt;modifications to the document, but also conditions such as highlighting or position changes are synchronized in real-time&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22px;"&gt;&amp;nbsp;with all participants. The additional combination with&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22px;"&gt;&lt;a class="mb" href="http://www.nextiteration.de/images/screenshots/section3-01.jpg" id="A3" rel="type:jpg" runat="server" style="color: #d75600; font-family: Arial, Helvetica, sans-serif; text-decoration: none;" title="Send and receive text-messages"&gt;Instant Messaging&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22px;"&gt;, virtual team grouping and context-sensitive collaboration significantly enhances the efficiency in cooperation for development teams&lt;/span&gt;&lt;/i&gt;".&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://nuget.org/"&gt;NuGet&lt;/a&gt;&amp;nbsp;- the .Net package management system. This is something I've been following but not actively used, however a contributor to MonitorWang, Rob Gibbens packaged the assemblies required to create your own custom MonitorWang plugins and I have to say it's impressive stuff, a really slick way to get people connected to your code/components. Thanks Rob for introducing this!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The packages below give you the required MonitorWang assemblies to allow you to develop custom MonitorWang plugins...just choose your flavour!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://bit.ly/hkzPl8"&gt;MonitorWang Publisher Developer Package&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bit.ly/eL5USC"&gt;MonitorWang HealthCheck Developer Package&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-7282767712241935557?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UUFvg7uprMddriGdDtZMZ3Mwfoc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UUFvg7uprMddriGdDtZMZ3Mwfoc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UUFvg7uprMddriGdDtZMZ3Mwfoc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UUFvg7uprMddriGdDtZMZ3Mwfoc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/w3YWFJzF51Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/7282767712241935557/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=7282767712241935557" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/7282767712241935557?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/7282767712241935557?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/w3YWFJzF51Q/spring-roundup.html" title="Spring Roundup" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/03/spring-roundup.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4NRno4cCp7ImA9Wx9UGUU.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-8547491425318724029</id><published>2011-02-17T08:26:00.001Z</published><updated>2011-02-17T23:06:37.438Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-17T23:06:37.438Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="Geckoboard" /><title>Google Infographic Tool + Geckoboard?</title><content type="html">So just saw &lt;a href="http://www.fastcodesign.com/1663247/google-opens-up-infographic-tools-for-everyones-use"&gt;this&lt;/a&gt; (via &lt;a href="http://twitter.com/hugorodgerbrown"&gt;@hugorodgerbrown&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
You can upload your data and visualise it - if you use &lt;a href="http://www.geckoboard.com/"&gt;Geckoboard&lt;/a&gt; for your business dashboard then how about a mashup - want to map your biggest customers? Order hotspots? you name it - it would now appear possible...just need to work out how to get the Google output into Geckoboard....anyone?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-8547491425318724029?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HvoV8y_IQuaVWKV3x2scHjVavxQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HvoV8y_IQuaVWKV3x2scHjVavxQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HvoV8y_IQuaVWKV3x2scHjVavxQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HvoV8y_IQuaVWKV3x2scHjVavxQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/cXb_iGKPEfE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/8547491425318724029/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=8547491425318724029" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/8547491425318724029?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/8547491425318724029?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/cXb_iGKPEfE/google-infographic-tool-geckoboard.html" title="Google Infographic Tool + Geckoboard?" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/02/google-infographic-tool-geckoboard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UFR3g9cCp7ImA9Wx9WGUg.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-2028722769782131510</id><published>2011-01-25T10:26:00.000Z</published><updated>2011-01-25T10:26:56.668Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-25T10:26:56.668Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="productivity" /><category scheme="http://www.blogger.com/atom/ns#" term="Home Automation" /><category scheme="http://www.blogger.com/atom/ns#" term="roundup" /><title>Roundup</title><content type="html">Another roundup post to cover a few things of interest I've discovered lately....&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;(via Automated Home)&lt;/i&gt; comes the &lt;a href="http://www.automatedhome.co.uk/New-Products/Kwikwai-Bridges-HDMI-CEC-to-Ethernet-USB-and-Serial.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+AutomatedHome+%28Automated+Home%29&amp;amp;utm_content=Google+UK"&gt;HDMI hacker box from Kwikwai&lt;/a&gt; - it allows you to bridge home automation systems into AV equipment, eg: send a text string to your TV OSD! CEC is an optional command channel built into HDMI that allows commands to be sent from one device to another - eg: when you turn your TV off it sends a turn off command back down to your DVD player connected to it. This box allows you to sit in between devices and fake commands or just discover (sniff them).&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;(via HRB/JasonFried/Twitter)&lt;/i&gt; Great post on &lt;a href="http://www.nfib.com/mybusiness-magazine/operational-insight"&gt;un-managing your team&lt;/a&gt; to unlock potential from a guy at 37signals (basecamp). Superb post - a must read! 37signals are rewritting the development team book!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-2028722769782131510?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EgHaw00-fJpbVIpcqJ3COmTMTlU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EgHaw00-fJpbVIpcqJ3COmTMTlU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EgHaw00-fJpbVIpcqJ3COmTMTlU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EgHaw00-fJpbVIpcqJ3COmTMTlU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/s5Lb3SSkwRw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/2028722769782131510/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=2028722769782131510" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/2028722769782131510?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/2028722769782131510?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/s5Lb3SSkwRw/roundup.html" title="Roundup" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/01/roundup.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcDRX45fCp7ImA9Wx9WEE0.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-9047189428589211264</id><published>2011-01-14T12:27:00.000Z</published><updated>2011-01-14T12:27:54.024Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-14T12:27:54.024Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="News" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><title>NServiceBus and BizSpark</title><content type="html">Just seen a post by &lt;a href="http://tech.groups.yahoo.com/group/nservicebus/message/9755"&gt;Udi Dahan about NServiceBus (NSB) licensing&lt;/a&gt; and companies that participate in &lt;a href="http://www.bizspark.com/"&gt;Microsofts BizSpark program&lt;/a&gt; (which I/mine does :-).&lt;br /&gt;
&lt;br /&gt;
Essentially...&lt;br /&gt;
"&lt;i&gt;So, if you're company is in&amp;nbsp; BizSpark, in addition to all the software you're getting for free from Microsoft, I'm happy to offer you a free NServiceBus Foundation license or $1500 off a Standard license. That includes support&lt;/i&gt;".&lt;br /&gt;
&lt;br /&gt;
The new NSB licensing model is pretty well thought out but still restrictive in terms of physical layout of applications - the community license (and even other licenses) only allow it to run a single machine - if you want to use it across machines then it's big bucks (as far as I understand it).&lt;br /&gt;
&lt;br /&gt;
Anyway - if you are in BizSpark, check the &lt;a href="http://tech.groups.yahoo.com/group/nservicebus/message/9755"&gt;link&lt;/a&gt; out to benefit from Udi's/NSB Limited generosity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-9047189428589211264?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zTF5_WUS6cq_cZVRbbK1Ux2hw1U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zTF5_WUS6cq_cZVRbbK1Ux2hw1U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zTF5_WUS6cq_cZVRbbK1Ux2hw1U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zTF5_WUS6cq_cZVRbbK1Ux2hw1U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/Z_dEjmvktIo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/9047189428589211264/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=9047189428589211264" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/9047189428589211264?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/9047189428589211264?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/Z_dEjmvktIo/nservicebus-and-bizspark.html" title="NServiceBus and BizSpark" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/01/nservicebus-and-bizspark.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGSH4_eCp7ImA9Wx9XGU8.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-1161133299274832086</id><published>2011-01-13T13:43:00.001Z</published><updated>2011-01-13T13:43:49.040Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-13T13:43:49.040Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Business" /><title>These are the 'droid's you're looking for!</title><content type="html">I recently posted about &lt;a href="http://jimblogdog.blogspot.com/2011/01/why-brand-needs-as-open-api.html"&gt;Brands and API's&lt;/a&gt; and in it I mentioned the rise of Android and &lt;a href="http://on.mash.to/gXOVu8"&gt;this new article&lt;/a&gt; on mashable confirms things....&lt;i&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Some great stats in the article if you are interested in the smartphone market. Ok, - it is from a single company but I think it shows the general trend - Android is big and getting bigger, fast....now, how's that app coming on? ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-1161133299274832086?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HNzBMsR6gdxnIoaNNXPc-QSf0Vs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HNzBMsR6gdxnIoaNNXPc-QSf0Vs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HNzBMsR6gdxnIoaNNXPc-QSf0Vs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HNzBMsR6gdxnIoaNNXPc-QSf0Vs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/YDx3OzrFu9Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/1161133299274832086/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=1161133299274832086" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/1161133299274832086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/1161133299274832086?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/YDx3OzrFu9Y/these-are-droids-you-are-looking-for.html" title="These are the 'droid's you're looking for!" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/01/these-are-droids-you-are-looking-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8BQXg4cSp7ImA9Wx9XE08.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-6503442983639269907</id><published>2011-01-06T15:13:00.001Z</published><updated>2011-01-06T15:30:50.639Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-06T15:30:50.639Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MonitorWang" /><title>MonitorWang v1.0.6 released</title><content type="html">Just a quick note to say that I've released v1.0.6 of MonitorWang - all the details are &lt;a href="http://monitorwang.codeplex.com/releases/view/58618"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The main focus of this release is to add some more HealthChecks...&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Windows Service State and Startup type Checks - monitors that services are in the expected state (eg: running) and have the correct startup type (eg: automatic).&lt;/li&gt;
&lt;li&gt;Url Ping - pings your urls checking for http failures and slow performance (response threshold configurable)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
PS: I'd love to hear from &lt;b&gt;anyone using MonitorWang&lt;/b&gt; - what sort of checks are you running, any problems or suggestions you have would be great!&lt;br /&gt;
&lt;br /&gt;
J&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-6503442983639269907?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jP0K1Fg_7qv5w2XAiDHTtpnMNyc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jP0K1Fg_7qv5w2XAiDHTtpnMNyc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jP0K1Fg_7qv5w2XAiDHTtpnMNyc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jP0K1Fg_7qv5w2XAiDHTtpnMNyc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/Ix-f73sHwCI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/6503442983639269907/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=6503442983639269907" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/6503442983639269907?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/6503442983639269907?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/Ix-f73sHwCI/monitorwang-v106-released.html" title="MonitorWang v1.0.6 released" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/01/monitorwang-v106-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUGQ3w7fyp7ImA9Wx9XE00.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-8670481997740501367</id><published>2011-01-05T10:43:00.002Z</published><updated>2011-01-06T10:03:42.207Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-06T10:03:42.207Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Business" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="Geckoboard" /><title>Why a Brand needs an Open API</title><content type="html">This is a &lt;a href="http://mashable.com/2011/01/04/brand-open-api-developers/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+Mashable+%28Mashable%29&amp;amp;utm_content=Google+UK"&gt;great article&lt;/a&gt; by &lt;i&gt;Adam Kleinberg &lt;/i&gt;on how a brand and enabling third parties to write exciting applications and mashups targeting new channels via your Api is &lt;i&gt;so important&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
The resources required to produce a website and accompanying iPhone app can be significant - what if you invested in your business/eCommerce API and a referral/developer programme instead?&lt;br /&gt;
&lt;br /&gt;
The world becomes your development partner and ANYONE can start creating applications backed by YOUR business.&lt;br /&gt;
&lt;br /&gt;
Take Android as an example - it's gaining market share at such a rapid pace that you will need an Android App soon to stay in the game as it's not a sector you can afford to ignore. Pouring all your money into a specific vendor channel (say iPhone) could mean you are left out in the cold when other technologies/forms/channels become viable. With an API in place it would be a simple, cheaper exercise in creating an Android application on top of the API calls - and the API gives you options in how you go about this; give the API docs to an off-shore resource, in-house team or let some bright spark come to you with their app or idea.&lt;br /&gt;
&lt;br /&gt;
Sure you will always need YOUR website but an API "powers the possible" - who knows what killer mashup someone out there could dream up tomorrow - and your business could benefit from it with thousands of new sales. You have the infrastructure to process sales and transactions - let the other 6,891,463,699-ish people (world population as of today) figure out how to make money out of it for you. &lt;br /&gt;
&lt;br /&gt;
2011 - year of the API! (Oh and &lt;a href="http://geckoboard.com/"&gt;Geckoboard&lt;/a&gt;, 2011 is all about the dashboard)&lt;br /&gt;
&lt;br /&gt;
Happy New Year Everyone!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-8670481997740501367?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4lsT29LZ-paaaYmhwLNt_15kHqw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4lsT29LZ-paaaYmhwLNt_15kHqw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4lsT29LZ-paaaYmhwLNt_15kHqw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4lsT29LZ-paaaYmhwLNt_15kHqw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/iiW-2bZRYCI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/8670481997740501367/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=8670481997740501367" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/8670481997740501367?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/8670481997740501367?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/iiW-2bZRYCI/why-brand-needs-as-open-api.html" title="Why a Brand needs an Open API" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2011/01/why-brand-needs-as-open-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkACRno_eSp7ImA9Wx9QFkg.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-8215167859130950732</id><published>2010-12-29T20:32:00.000Z</published><updated>2010-12-29T20:32:47.441Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-29T20:32:47.441Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MonitorWang" /><title>MonitorWang v1.0.5 released</title><content type="html">Just a quick note to say that I've released v1.0.5 of MonitorWang - all the details are &lt;a href="http://monitorwang.codeplex.com/releases/view/58036"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The main feature is "Growl Notification Finalisers" - these allow you to modify the Growl notification based on the result or result count plus you can easily write your own Finaliser to adjust the Growl Notification priority or message text based on your custom logic.&lt;br /&gt;
&lt;br /&gt;
There is also a major bugfix to the Castle Interceptor logic that affects the Publisher Filters.&lt;br /&gt;
&lt;br /&gt;
Enjoy - please report any problems via the "discussions" tab on the codeplex site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-8215167859130950732?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lmZrNPa3GuhRtQIwYICZNgVjDm4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lmZrNPa3GuhRtQIwYICZNgVjDm4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lmZrNPa3GuhRtQIwYICZNgVjDm4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lmZrNPa3GuhRtQIwYICZNgVjDm4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/VFfMZWsMk2k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/8215167859130950732/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=8215167859130950732" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/8215167859130950732?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/8215167859130950732?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/VFfMZWsMk2k/monitorwang-v105-released.html" title="MonitorWang v1.0.5 released" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/12/monitorwang-v105-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIBQns7cSp7ImA9Wx9QEkQ.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-4871194671566570526</id><published>2010-12-25T17:18:00.001Z</published><updated>2010-12-25T17:19:13.509Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-25T17:19:13.509Z</app:edited><title>Pass it down the line...</title><content type="html">Just &lt;a href="http://www.bbc.co.uk/news/magazine-12043294"&gt;read this&lt;/a&gt; on the BBC News website and thought it a lovely heart warming story - just remember...."pass it down the line".&lt;br /&gt;
&lt;br /&gt;
Merry Christmas!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-4871194671566570526?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JzSP6bZ15TZTWUTsAhPMonAQtb4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JzSP6bZ15TZTWUTsAhPMonAQtb4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JzSP6bZ15TZTWUTsAhPMonAQtb4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JzSP6bZ15TZTWUTsAhPMonAQtb4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/S6dPGpPl1-0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/4871194671566570526/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=4871194671566570526" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4871194671566570526?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4871194671566570526?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/S6dPGpPl1-0/pass-it-down-line.html" title="Pass it down the line..." /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/12/pass-it-down-line.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UDR3s4eCp7ImA9Wx9SGEk.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-4396580189858419803</id><published>2010-12-08T23:01:00.000Z</published><updated>2010-12-08T23:01:16.530Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-08T23:01:16.530Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MonitorWang" /><category scheme="http://www.blogger.com/atom/ns#" term="Geckoboard" /><title>MonitorWang v1.0.4 released</title><content type="html">Big release this....&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Added support for SQLite databases&lt;/li&gt;
&lt;li&gt;Added a check that captures energy usage data from an Owl Energy Monitor&lt;/li&gt;
&lt;li&gt;Added Publisher Filters to allow you to hook custom logic into the publication process&lt;/li&gt;
&lt;li&gt;Added support for swapping between data sources for you Geckoboard Data Service Activity&lt;/li&gt;
&lt;li&gt;Plus a refactor of the internal HealthCheck/Publisher mechanism (now uses the cool Magnum Pipeline components) &lt;/li&gt;
&lt;/ul&gt;More details on the &lt;a href="http://bit.ly/hWNjiW"&gt;v1.0.4 codeplex release&lt;/a&gt; page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-4396580189858419803?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xTRpcuxVjWDFE3WuSSVWbToOOuY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xTRpcuxVjWDFE3WuSSVWbToOOuY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xTRpcuxVjWDFE3WuSSVWbToOOuY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xTRpcuxVjWDFE3WuSSVWbToOOuY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/y8fEWIA8Pqk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/4396580189858419803/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=4396580189858419803" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4396580189858419803?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4396580189858419803?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/y8fEWIA8Pqk/monitorwang-v104-released.html" title="MonitorWang v1.0.4 released" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/12/monitorwang-v104-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04DRXgyfCp7ImA9Wx5aGU0.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-4241426032420828210</id><published>2010-11-16T11:12:00.000Z</published><updated>2010-11-16T11:12:54.694Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-16T11:12:54.694Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GeckoboardApps" /><category scheme="http://www.blogger.com/atom/ns#" term="Geckoboard" /><title>FreeAgent Geckoboard widgets....its a trust thing</title><content type="html">So I've been looking at how simple it would be to get &lt;a href="http://geckoboard.com/"&gt;Geckoboard&lt;/a&gt; widgets up and running to visualise your &lt;a href="http://www.freeagentcentral.com/"&gt;FreeAgent&lt;/a&gt; data....and the answer is, pretty easy really. The idea I had was for a text widget to display your due invoices. The &lt;a href="http://www.freeagentcentral.com/developers/freeagent-api#api_invoices"&gt;FA api is pretty comprehensive&lt;/a&gt; and this data is available via REST as XML - authentication is http basic using your FA username and password.&lt;br /&gt;
&lt;br /&gt;
I created a new FA widget user for my account and assigned it permissions up to the Invoicing Level - this protects my more sensitive data. Wrap all this up in a Google-AppEngine (GAE) app and there you have it - your FA pending invoices....&lt;br /&gt;
&lt;br /&gt;
In glorious public view....oh dear&lt;br /&gt;
&lt;br /&gt;
Ok, no problem - we use the Geckoboard ApiKey to secure it so that only requests with the correct ApiKey (that we set in the widget configuration) will be allowed access to the feed. Or rather &lt;i&gt;I&lt;/i&gt; use &lt;i&gt;my&lt;/i&gt; Apikey - it works in my GAE app as I can hard code the apikey check into it...this app instance cannot be used to provide FA data for &lt;i&gt;your&lt;/i&gt; account as it means sharing your ApiKey with me...hhmmm - as trustworthy as I am and with a lock down FA user it's still too unsecure for my GAE widget to provide your FA data. I could generate and share a unique ApiKey for your widget but that's not what I want - I don't want to have to administer this in any form!&lt;br /&gt;
&lt;br /&gt;
Furthermore - my GAE app would also need your FA widget user credentials to be able to make the FA api call to grab the data - you don't want to provide this on the url as querystring params and it can't be POSTed from your Geckoboard widget. Ideally you would tell me them - I would store them and use them when your widget called for the data - not something I want to do/offer from my what was once simple FA widget data feed!&lt;br /&gt;
&lt;br /&gt;
So this problem makes something like &lt;a href="http://geckoboardapps.com/"&gt;GeckoboardApps&lt;/a&gt; make a hell of a lot of sense. They already have the ApiKey problem licked with a random key and feed url and I suspect storing any credentials securely is also part of the package! Nice...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-4241426032420828210?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NXAZLQSc6qOu0giLkS2k5p50JYE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NXAZLQSc6qOu0giLkS2k5p50JYE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NXAZLQSc6qOu0giLkS2k5p50JYE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NXAZLQSc6qOu0giLkS2k5p50JYE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/3q_s-LdDeTw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/4241426032420828210/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=4241426032420828210" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4241426032420828210?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4241426032420828210?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/3q_s-LdDeTw/freeagent-geckoboard-widgetsits-trust.html" title="FreeAgent Geckoboard widgets....its a trust thing" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/11/freeagent-geckoboard-widgetsits-trust.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08GQ3g4eip7ImA9Wx5aGE4.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-4503245954365433046</id><published>2010-11-15T14:37:00.000Z</published><updated>2010-11-15T14:37:02.632Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T14:37:02.632Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><title>Kinect does Minority Report...</title><content type="html">via &lt;a href="http://gizmodo.com/5688319/minority-report-courtesy-of-kinect"&gt;Gizmodo&lt;/a&gt;...&lt;br /&gt;
&lt;br /&gt;
&lt;object height="290" width="440"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ho6Yhz21BJI&amp;hl=en_US&amp;feature=player_embedded&amp;version=3"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ho6Yhz21BJI&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="440" height="290"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-4503245954365433046?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tM5_AO2XBWudr-C1LnoW-qJ41dg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tM5_AO2XBWudr-C1LnoW-qJ41dg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tM5_AO2XBWudr-C1LnoW-qJ41dg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tM5_AO2XBWudr-C1LnoW-qJ41dg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/evbXkfZWcH8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/4503245954365433046/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=4503245954365433046" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4503245954365433046?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4503245954365433046?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/evbXkfZWcH8/kinect-does-minority-report.html" title="Kinect does Minority Report..." /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/11/kinect-does-minority-report.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQMQXc-fCp7ImA9Wx5aGE8.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-4385867118477648753</id><published>2010-11-15T09:32:00.001Z</published><updated>2010-11-15T13:23:00.954Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T13:23:00.954Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Business" /><category scheme="http://www.blogger.com/atom/ns#" term="FreeAgent" /><title>FreeAgent - accounting made simple!</title><content type="html">About 6 months ago I swapped accountants - I had a pretty good, fully online accountant but was introduced to &lt;a href="http://www.freeagentcentral.com/"&gt;FreeAgent&lt;/a&gt; - did the free 30 day trial and was hooked - it did everything my accountants system did but better, much better....oh and soooo much cheaper, £100 a month cheaper! It handles Payroll, Salary, VAT, NIC, Invoicing, Expenses, Bank Account...the lot (my personal fav is the &lt;a href="http://www.outofpocketapp.com/"&gt;Out-of-Pocket iPhone app&lt;/a&gt; that lets you submit expense claims direct to your FreeAgent account!)&lt;br /&gt;
&lt;br /&gt;
Of course I immediately used this saving to justify an iPad purchase, but that aside and six months on I can totally recommend FreeAgent. I still have an accountant, a new one, &lt;a href="http://www.kpfaccountancy.com/"&gt;KPF Accountants&lt;/a&gt; - these guys are FreeAgent experts - and are really just there to get your Company Year End accounts in order...which they have just done...which makes me happy!&lt;br /&gt;
&lt;br /&gt;
So to celebrate and spread the FreeAgent &amp;amp; KPF love for a great cost effective accounting solution (&amp;amp; referral discounts all round!) I thought I'd let you know about it. A FreeAgent account is about £25/month, £45/month through KPF (which includes your company year end processing PLUS the FreeAgent account)....and the &lt;a href="http://www.freeagentcentral.com/support/kb/misc/the-freeagent-referral-scheme"&gt;excellent FreeAgent referral program&lt;/a&gt; offers 10% discount to both you and me if you use the "I heart FreeAgent" badge (or &lt;a href="http://fre.ag/360uqfc4"&gt;this link&lt;/a&gt;) on the right sidebar of this blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-4385867118477648753?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4noPxdW0NLeqAGNkGX7AxDK2th0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4noPxdW0NLeqAGNkGX7AxDK2th0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4noPxdW0NLeqAGNkGX7AxDK2th0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4noPxdW0NLeqAGNkGX7AxDK2th0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/qSVRnyrZMbY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/4385867118477648753/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=4385867118477648753" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4385867118477648753?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4385867118477648753?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/qSVRnyrZMbY/freeagent-accounting-made-simple.html" title="FreeAgent - accounting made simple!" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/11/freeagent-accounting-made-simple.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cMRnozfSp7ImA9Wx5aFUo.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-4362251604803940528</id><published>2010-11-12T14:11:00.000Z</published><updated>2010-11-12T14:11:27.485Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-12T14:11:27.485Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><title>Web Designers vs Web Developers...LOL</title><content type="html">from &lt;a href="http://sixrevisions.com/infographs/web-designers-vs-web-developers/"&gt;Six Revisions&lt;/a&gt; via &lt;a href="http://gizmodo.com/5687729/web-designers-versus-web-developers-visualized"&gt;Gizmodo&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.landingpages.co.il/wix/web-designers-vs-developers.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://www.landingpages.co.il/wix/web-designers-vs-developers.png" width="411" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-4362251604803940528?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X2ev4dZEFUR_Q6_4adFb1HJt7XM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X2ev4dZEFUR_Q6_4adFb1HJt7XM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X2ev4dZEFUR_Q6_4adFb1HJt7XM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X2ev4dZEFUR_Q6_4adFb1HJt7XM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/hhhb0VldACI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/4362251604803940528/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=4362251604803940528" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4362251604803940528?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/4362251604803940528?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/hhhb0VldACI/web-designers-vs-web-developerslol.html" title="Web Designers vs Web Developers...LOL" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/11/web-designers-vs-web-developerslol.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEACR3k8fip7ImA9Wx5aGE4.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-2731824808062035601</id><published>2010-11-12T11:19:00.001Z</published><updated>2010-11-15T14:52:46.776Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T14:52:46.776Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fluentgeoapi" /><category scheme="http://www.blogger.com/atom/ns#" term="AppEngine" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="Geckoboard" /><title>On the radar...</title><content type="html">Couple of things I've bumped up against in the last few days that have piqued my curiosity,&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://storyq.codeplex.com/"&gt;StoryQ&lt;/a&gt; - a BDD framework for .Net. Like all of these things you can't really comment on how good it looks but from what I have read it "looks" pretty good....I'll put it to use on my next home project I think to kick its tyres.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://flit.codeplex.com/"&gt;FLIT&lt;/a&gt; - "&lt;i&gt;(the FLuent Interface Toolkit) streamlines the design and implementation of fluent interfaces in C#. FLIT generates customisable fluent interface code from a simple text-based DSL. FLIT includes a parser, an object model, and a set of starter templates.&lt;/i&gt;" - I'm a &lt;a href="http://code.google.com/p/fluentgeoapi/"&gt;fan of fluent interfaces&lt;/a&gt; as they simplify coding as the code reads better and it is easier to write against (use). This looks an interesting project - again something for the next home project that has a fluent interface.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;Beautiful Soup&lt;/a&gt; - "&lt;i&gt;Beautiful Soup is a Python HTML/XML parser designed for quick turnaround projects like screen-scraping&lt;/i&gt;". I'm looking at producing all sorts of &lt;a href="http://geckoboard.com/"&gt;Geckoboard&lt;/a&gt; widget data feeds with the mighty Google AppEngine and this was recommended to me by Hugo - I think it's going to come in handy...along with &lt;a href="http://developer.yahoo.com/yql/console/"&gt;YQL&lt;/a&gt; I think I can knock up some pretty interesting widget feeds (a lot of interest/competition in this space, maybe consolidating widgets/feeds into a single place like &lt;a href="http://geckoboardapps.com/"&gt;Geckoboard Apps&lt;/a&gt; (http://www.twitter.com/geckoboardapps) is the way to go). For the .Net peeps that need a HTML parser take a peek at the &lt;a href="http://htmlagilitypack.codeplex.com/"&gt;HTML Agility Pack&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-2731824808062035601?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FC7tMhySNYCX_JTKol93tWMxWaM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FC7tMhySNYCX_JTKol93tWMxWaM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FC7tMhySNYCX_JTKol93tWMxWaM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FC7tMhySNYCX_JTKol93tWMxWaM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/Uo6i5Kh7vTU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/2731824808062035601/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=2731824808062035601" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/2731824808062035601?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/2731824808062035601?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/Uo6i5Kh7vTU/on-radar.html" title="On the radar..." /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/11/on-radar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQMSHY-cCp7ImA9Wx5aFEo.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-7166720999902751547</id><published>2010-11-11T11:47:00.002Z</published><updated>2010-11-11T11:53:09.858Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-11T11:53:09.858Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AppEngine" /><category scheme="http://www.blogger.com/atom/ns#" term="Geckoboard" /><title>Geckoboard Countdown Widget v2</title><content type="html">v2 is here, now with added colours! This time using the RAG Numbers widget to display your date countdown - as you get nearer the date the number will change from green to amber then red.&lt;br /&gt;
&lt;br /&gt;
The new url is: &lt;a href="http://geckocountdown.appspot.com/rag/?date=2010-12-25&amp;amp;tz=0&amp;amp;msg=Days+to+Xmas%21"&gt;http://geckocountdown.appspot.com/rag/?date=2010-12-25&amp;amp;tz=0&amp;amp;msg=Days+to+Xmas!&lt;/a&gt;&lt;br /&gt;
Note 1: notice the new &lt;b&gt;/rag/&lt;/b&gt; path and the &lt;b&gt;msg&lt;/b&gt; querystring param.&lt;br /&gt;
Note 2: the original v1 url still works&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To use this on your Geckoboard add a new "Custom Widget/RAG Numbers" widget. By default the number will turn amber at 10 or less days to go and red at 3 or less days to go however you can change these with the querystring (see below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Required querystring params &lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;date: "&lt;i&gt;yyyy-mm-dd&lt;/i&gt;" format, this is the target date to countdown to&lt;/li&gt;
&lt;li&gt;tz: timezone offset in hours from GMT that you are in. Can be negative if you are behind GMT&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Optional querystring params&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;msg: the label that appears next to the number of days (remember to encode spaces as +). The default is "Days Remaining" if you do not specify this on the querystring.&lt;/li&gt;
&lt;li&gt;red: the number of days remaining that the number should be shown as red (default is 3).&lt;/li&gt;
&lt;li&gt;amber: the number of days remaining that the number should be shown as amber (default is 10).&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_2FqkN2uAW5Q/TNvUqP_TDyI/AAAAAAAAAO8/pdXoGBRIon4/s1600/geckocountdown-green.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_2FqkN2uAW5Q/TNvUqP_TDyI/AAAAAAAAAO8/pdXoGBRIon4/s1600/geckocountdown-green.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_2FqkN2uAW5Q/TNvW3gK11JI/AAAAAAAAAPA/4lzbRwqxyjk/s1600/geckocountdown-amber.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_2FqkN2uAW5Q/TNvW3gK11JI/AAAAAAAAAPA/4lzbRwqxyjk/s1600/geckocountdown-amber.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FqkN2uAW5Q/TNvXBK4IXzI/AAAAAAAAAPI/3cktUns2O84/s1600/geckocountdown-red.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_2FqkN2uAW5Q/TNvXBK4IXzI/AAAAAAAAAPI/3cktUns2O84/s1600/geckocountdown-red.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-7166720999902751547?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WYtogqZk2i6vdJO03-FvckMbARA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WYtogqZk2i6vdJO03-FvckMbARA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WYtogqZk2i6vdJO03-FvckMbARA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WYtogqZk2i6vdJO03-FvckMbARA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/0Zi2xt8iCYI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/7166720999902751547/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=7166720999902751547" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/7166720999902751547?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/7166720999902751547?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/0Zi2xt8iCYI/geckoboard-countdown-widget-v2.html" title="Geckoboard Countdown Widget v2" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_2FqkN2uAW5Q/TNvUqP_TDyI/AAAAAAAAAO8/pdXoGBRIon4/s72-c/geckocountdown-green.PNG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/11/geckoboard-countdown-widget-v2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUMSHc4fCp7ImA9Wx5aFE8.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-1448091632416934610</id><published>2010-11-10T19:36:00.003Z</published><updated>2010-11-10T20:18:09.934Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-10T20:18:09.934Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AppEngine" /><category scheme="http://www.blogger.com/atom/ns#" term="MonitorWang" /><category scheme="http://www.blogger.com/atom/ns#" term="Geckoboard" /><title>Geckoboard and Google App Engine = Awesome!</title><content type="html">So I've just completed my first Google App Engine python app....I can't begin to say how awesome App Engine is...I had the python and Google Apps SDK installed and a Hello World app deployed onto world class infrastructure in about 20 mins flat. Deployment, simple! Management, simple! Python coding...not so simple (yet!).&lt;br /&gt;
&lt;br /&gt;
So after seeing how awesome it was I put it to good use and implemented an idea I had for the &lt;a href="http://geckoboard.com/"&gt;Geckoboard&lt;/a&gt; Number widget - a day countdown. I've already implemented this in &lt;a href="http://monitorwang.codeplex.com/"&gt;MonitorWang&lt;/a&gt; so if you use this (does anybody? I've had nearly 200 downloads but not a single comment about it, not a single one, good, bad or indifferent!) you can plug your Geckoboard into that.&lt;br /&gt;
&lt;br /&gt;
However a conversation with &lt;a href="http://blog.rodger-brown.com/"&gt;Hugo&lt;/a&gt; the other day piqued my interest in Google App Engine and this seemed the ideal thing to use it for.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2FqkN2uAW5Q/TNrxw2Cb_-I/AAAAAAAAAO4/MzAK6WBEOks/s1600/geckoboard-countdown.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_2FqkN2uAW5Q/TNrxw2Cb_-I/AAAAAAAAAO4/MzAK6WBEOks/s1600/geckoboard-countdown.png" /&gt;&lt;/a&gt;&lt;/div&gt;Very simply you put the date to countdown to on the querystring and it returns the Geckoboard Number widget XML containing the number of days to go. This means you can add a widget with the number of days remaining to an important or milestone date - the example shown is "Days to Xmas" and this number should countdown everyday.&lt;br /&gt;
&lt;br /&gt;
The url for your number widget is,&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://geckocountdown.appspot.com/?date=2010-12-25&amp;amp;tz=0"&gt;http://geckocountdown.appspot.com/?date=2010-12-25&amp;amp;tz=0&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Where the &lt;b&gt;date&lt;/b&gt; querystring param must be in the format yyyy-mm-dd and the &lt;b&gt;tz&lt;/b&gt; param is your timezone offset in hours from GMT - this ensures that the number of days change at the correct time.&lt;br /&gt;
&lt;br /&gt;
Enjoy! I'll be watching.....mwahhhaahaaahha - the mighty Google App Engine Dashboard will give me all the stats I need to see if you are using it! The free account is good for c. 5 MILLION, yes, MILLION hits a month so please don't be shy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-1448091632416934610?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cvTGlBhS9D72gJfRetYlq8zy8fk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cvTGlBhS9D72gJfRetYlq8zy8fk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cvTGlBhS9D72gJfRetYlq8zy8fk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cvTGlBhS9D72gJfRetYlq8zy8fk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/pznD7tI5Ep8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/1448091632416934610/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=1448091632416934610" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/1448091632416934610?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/1448091632416934610?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/pznD7tI5Ep8/geckoboard-and-google-app-engine.html" title="Geckoboard and Google App Engine = Awesome!" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_2FqkN2uAW5Q/TNrxw2Cb_-I/AAAAAAAAAO4/MzAK6WBEOks/s72-c/geckoboard-countdown.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/11/geckoboard-and-google-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIFQns5fyp7ImA9Wx5bEkg.&quot;"><id>tag:blogger.com,1999:blog-8598704.post-9101295174534616351</id><published>2010-10-28T09:18:00.000Z</published><updated>2010-10-28T09:18:33.527Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-28T09:18:33.527Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="deployment" /><category scheme="http://www.blogger.com/atom/ns#" term="DDVT" /><category scheme="http://www.blogger.com/atom/ns#" term="deploymentwang" /><title>Introducing...Declarative Deployment Verification Tests (DDVT)</title><content type="html">&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=jimblogdog-21&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B003YMNVC0&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;I'm reading Continuous Delivery (CD) at the moment and it's a thought provoking read and provides a great opportunity to reflect on your own deployment and delivery problems (oh come on, you have some too right?). A couple of recent deployment incidents of our own prompted me into action.&amp;nbsp;&lt;br /&gt;
&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;Introducing "&lt;i&gt;Declarative Deployment Verification Tests&lt;/i&gt;" - or &lt;b&gt;DDVT&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;So what is this?&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;Essentially it boils down to approaching deployment scripts as you would a development task - test first - and places the responsibility of defining the deployment success on the developer, who as the person creating the software, should be best placed to understand it's deployment requirements. That's the basic premise - define the success of the deployment up front in the form of unit tests in your favourite test framework, write the deployment scripts - rinse and repeat until you have all greens from dev to production environments.&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;I believe the magic ingredient though is the 'declarative' part - using BDD style naming in your tests. This has many benefits - the obvious one being structure and readability but also communicates the intent of the deployment action very very clearly. This has incredible value as it allows your deployment team, who might not be that au-fait with the details of the software they are deploying, to understand what you are trying to achieve. I have personally experienced a deployment being rolled back because of a very silly, minor deployment script error that caused the deployment guys (quite rightly) to bail out and roll back - if they understood better what was being achieved they could have intelligently inspected the script, possibly made the fix and got the deployment out the door.&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;Let's jump to an example.&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Scenario&lt;/b&gt;&lt;/div&gt;&lt;div&gt;You have developed a new feature "X" that has a windows service that performs some backend processing against a new table in an existing database and delivers the results via a new endpoint in an existing webservice. Let's break this down into the deployment objects and requirements.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Windows service&lt;/li&gt;
&lt;li&gt;Service account&lt;/li&gt;
&lt;li&gt;New table&lt;/li&gt;
&lt;li&gt;Service account requires db login and table/sp permissions&lt;/li&gt;
&lt;li&gt;Ditto for the website service account&lt;/li&gt;
&lt;li&gt;New webservice endpoint&lt;/li&gt;
&lt;li&gt;... &lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Phew - quite a list...and I can guarantee that this grows so fast during development that unless you dedicate tasks to create the deployment scripts as part of development you will be left with a huge list that takes much longer to implement at the end.&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;The typical cycle I have witnessed is this, dev with either admin permissions (yikes!) or manually create/deploy/configure things, forget to document each deployment item, create the deployment scripts at the end of development, try a deployment to a testing environment, scripts fail (you forgot about that db login), fix and re-run, fail (you forgot the table permissions), fix and re-run.......apologise to everyone...it will work this time for sure...oh,....&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;So on to the tests. BDD test style goes something like this,&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;GIVEN some context&lt;/div&gt;&lt;div&gt;WHEN something happens&lt;/div&gt;&lt;div&gt;THEN this is the expected result&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;Applying this for our scenario we would end up with a package of tests for this deployment split across the windows service, database and web service. Taking the database deployment as a starting point here is our pseudo nunit-ish DDVT code,&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Namespace Company.Project.Tests.Deployment.FeatureX&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;[TestFixture]&lt;/div&gt;&lt;div&gt;[Category"Deployment"]&lt;/div&gt;&lt;div&gt;[Category"FeatureX"]&lt;/div&gt;&lt;div&gt;class WhenTheDatabaseObjectsAreDeployed&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;[TestFixtureSetup]&lt;/div&gt;&lt;div&gt;void Given()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// arrange connections, helpers etc to be used by tests&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;[Test]&lt;/div&gt;&lt;div&gt;void ThenTheTableBobShouldExistInDbFred&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Assert.That..Table Bob does indeed exist the db Fred&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;[Test]&lt;/div&gt;&lt;div&gt;void ThenTheWindowsServiceAccountShouldHaveDbLoginGranted()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Assert.That..the above is true!&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;[Test]&lt;/div&gt;&lt;div&gt;void ThenTheWindowsServiceAccountShouldHaveInsertPermissionToTableBob()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Assert.That..you get the idea!....&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;// more tests....&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;Repeat for the windows and web service deployment objects.&lt;/div&gt;&lt;div&gt;Run your tests and see how readable they appear in your test runner &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;Then the most suited resource can start to implement the deployment scripts.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2FqkN2uAW5Q/TMk5y5o1aPI/AAAAAAAAAO0/vAHsIGnonrk/s1600/ddv_nunit_example.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="128" src="http://2.bp.blogspot.com/_2FqkN2uAW5Q/TMk5y5o1aPI/AAAAAAAAAO0/vAHsIGnonrk/s320/ddv_nunit_example.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;As you can see from the screenshot, should a test fail it's crystal clear what it was trying to assert and gives the DDVT test executor an opportunity to understand the deployment intent and possibly fix the problem on the fly.&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;If you have followed the CD book you will know that a great deployment process is unlikely to fail - it's in action too often and to be honest if you have a fully automated system then I'm sure you will have cracked this 'verification' problem already - deployment automation solves the majority of issues found in this stage of the software lifecycle.&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;So what value does the DDVT approach offer then?&lt;/div&gt;&lt;div&gt;&lt;br clear="none" /&gt;&lt;/div&gt;&lt;div&gt;Well for those mere mortals still striving for continuous delivery automated perfection this approach will certainly help tighten up your deployment process and I certainly think there are benefits in just approaching deployment script development such as, &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Declarative, descriptive DDVT created up front rather than cobbled together at the end of development&lt;/li&gt;
&lt;li&gt;DDVT effectively create a deployment 'spec'&lt;/li&gt;
&lt;li&gt;Provide a 'done' indicator as well as a 'quality' meter; you know you are 'done' implementing the deployment script when all the tests go green. You know the 'quality' of a deployment based on then number of test failures&lt;/li&gt;
&lt;li&gt;You can run these tests whenever you wish to sanity check the software install/platform or as a first pass in a troubleshooting run.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;In practical terms, if you are to adopt a DDVT approach then you will need to develop some infrastructure code/library to assist with those assert statements - eg, "Assert.That(&lt;b style="color: red;"&gt;DDVHelpers.SqlServer("server01").Db("Fred").Table("Bob").Exists()&lt;/b&gt;, ...)".&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;I have the bare bones of such a library that I currently use to power my SqlServer database DDVT and I am also developing windows service, filesystem and msmq DDV helpers. I will make this code available via my OSS project "&lt;span id="goog_831558026"&gt;&lt;/span&gt;&lt;a href="http://deploymentwang.codeplex.com/"&gt;DeploymentWang&lt;span id="goog_831558027"&gt;&lt;/span&gt;&lt;/a&gt;" - no promises about when though!&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Would a &lt;i&gt;Declarative Deployment Verification Testing&lt;/i&gt; approach improve your development/deployment process?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8598704-9101295174534616351?l=jimblogdog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/y6Fc4OHeu1Q-irCR8Qfho1YjbBg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y6Fc4OHeu1Q-irCR8Qfho1YjbBg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/y6Fc4OHeu1Q-irCR8Qfho1YjbBg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y6Fc4OHeu1Q-irCR8Qfho1YjbBg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JamesSimmonds/~4/iPDdHFj_P7k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jimblogdog.blogspot.com/feeds/9101295174534616351/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8598704&amp;postID=9101295174534616351" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/9101295174534616351?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8598704/posts/default/9101295174534616351?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JamesSimmonds/~3/iPDdHFj_P7k/introducingdeclarative-deployment.html" title="Introducing...Declarative Deployment Verification Tests (DDVT)" /><author><name>James Simmonds</name><uri>https://profiles.google.com/102035086643075343472</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_2FqkN2uAW5Q/TMk5y5o1aPI/AAAAAAAAAO0/vAHsIGnonrk/s72-c/ddv_nunit_example.JPG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://jimblogdog.blogspot.com/2010/10/introducingdeclarative-deployment.html</feedburner:origLink></entry></feed>

