<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3354578112415392473</id><updated>2012-01-24T14:27:40.516Z</updated><category term='VBScript'/><category term='Visual Studio'/><category term='Exchange'/><category term='Data Centre'/><category term='SQL Server'/><category term='ClickOnce'/><category term='Cycling'/><category term='Project Toolkit'/><category term='Management'/><category term='Windows'/><category term='Security'/><category term='Oracle'/><category term='Politics'/><category term='Testing'/><category term='Homework'/><category term='Web Design'/><category term='PowerShell'/><category term='Mathematics'/><category term='Travel'/><category term='Fiddler'/><category term='Food'/><category term='Coffeescript'/><category term='SSL'/><category term='LINQ-to-SQL'/><category term='Windows Service'/><category term='MSIEXEC'/><category term='Virtualization'/><category term='Web Platform Installer'/><category term='Car'/><category term='Networks'/><category term='Classic ASP'/><category term='DCOM'/><category term='IIS 5'/><category term='Fitness'/><category term='IIS 7.5'/><category term='jQuery'/><category term='WCAT'/><category term='SSH'/><category term='CSS'/><category term='REST'/><category term='Web Services'/><category term='Music'/><category term='SharePoint'/><category term='Patterns + Principles'/><category term='Photography'/><category term='Stored Procedures'/><category term='Hyper-V'/><category term='F#'/><category term='Java'/><category term='NoSQL'/><category term='Business'/><category term='C#'/><category term='Life'/><category term='JSONP'/><category term='BAT'/><category term='Functional Programming'/><category term='WCF'/><category term='Access DB'/><category term='Active Directory'/><category term='IIS 6'/><category term='ABAP'/><category term='Web Deploy'/><category term='GPS'/><category term='SAN'/><category term='Recipes'/><category term='Databases'/><category term='JavaScript'/><category term='SVN'/><category term='Football'/><category term='Analysis'/><category term='ASP.NET MVC 2'/><category term='Entity Framework'/><category term='.NET'/><category term='WatiN'/><title type='text'>Gareth Thomas Hill</title><subtitle type='html'>Life &amp;amp; Learning Log</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default?start-index=101&amp;max-results=100'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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>344</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5656998343036557748</id><published>2012-01-24T14:26:00.001Z</published><updated>2012-01-24T14:27:31.706Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Enable Remote Errors in SSRS</title><content type='html'>http://msdn.microsoft.com/en-us/library/aa337165(v=sql.105).aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5656998343036557748?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5656998343036557748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5656998343036557748&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5656998343036557748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5656998343036557748'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2012/01/enable-remote-errors-in-ssrs.html' title='Enable Remote Errors in SSRS'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8174786962368761644</id><published>2012-01-08T16:06:00.002Z</published><updated>2012-01-08T16:28:49.893Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hyper-V'/><title type='text'>Using Hyper-V with WiFi</title><content type='html'>Taken from: http://blogs.msdn.com/b/nicold/archive/2008/04/15/how-to-use-hyper-v-with-a-wireless-network-connection.aspx&lt;br /&gt;&lt;br /&gt;Hyper-V doesn’t manage wireless networks “by design", however this can be worked around.&lt;br /&gt;&lt;br /&gt;Create an “Internal Virtual Network” (IVN) with a name of your choice and the default settings.&lt;br /&gt;&lt;br /&gt;On the Hyper-V server add the "Network Policy and Access Service" role with “Remote Access Service” and “Routing”. Select “Custom Configuration” and “LAN Routing only” and “Start Service”.&lt;br /&gt;&lt;br /&gt;Add a static route to your WiFi router to forward requests for the Hyper-V guests to the Hyper-V host.  &lt;br /&gt;&lt;br /&gt;To make one of the guests visible in the Internet you can use port forwarding to the guest IP and port.&lt;br /&gt;&lt;br /&gt;To allow other devices on your wireless LAN to access guests, add a static route on each machine connected to the wireless&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8174786962368761644?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8174786962368761644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8174786962368761644&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8174786962368761644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8174786962368761644'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2012/01/using-hyper-v-with-wifi.html' title='Using Hyper-V with WiFi'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8788356791085358087</id><published>2012-01-06T14:31:00.000Z</published><updated>2012-01-06T14:32:02.463Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows Disk Performance</title><content type='html'>The best initial indicator of disk performance on a Windows host is obtained by using the “\Logical Disk(*)\Avg. sec/Read” and “\Logical Disk(*)\Avg. sec/Write” performance monitor counters. These performance monitor counters measure the amount of time that read and write operations take to respond to the operating system. As a general rule of thumb, average response times greater than 15ms are considered sub-optimal. This is based on the typical seek time of a single 7200 RPM disk drive without cache. The use of logical disk versus physical disk performance monitor counters is recommended because Windows applications and services utilize logical drives represented as drive letters wherein the physical disk (LUN) presented to the operating system can be comprised of multiple physical disk drives in a disk array. Use the following rule of thumb when measuring disk latency on the Windows host using the \Logical Disk(*)\Avg. Disk sec/Read or \Logical Disk(*)\Avg. Disk sec/Write performance monitor counters:&lt;br /&gt;&lt;br /&gt;1ms to 15ms = Healthy&lt;br /&gt;15ms to 25ms = Warning or Monitor&lt;br /&gt;26ms or greater = Critical, performance will be adversely affected&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8788356791085358087?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8788356791085358087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8788356791085358087&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8788356791085358087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8788356791085358087'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2012/01/windows-disk-performance.html' title='Windows Disk Performance'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1801843263675950396</id><published>2012-01-04T16:55:00.000Z</published><updated>2012-01-04T16:56:26.827Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Unblock Multiple Downloaded Files</title><content type='html'>http://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a&lt;br /&gt;&lt;br /&gt;To recursively remove this stream for all files, follow these steps :&lt;br /&gt; 1.Download the Streams CLI executable from Microsoft&lt;br /&gt; 2.Put the streams.exe executable in your Windows directory (or anywhere that the system can find it)&lt;br /&gt; 3.Run this line in the command line :&lt;br /&gt; &lt;br /&gt;streams -s -d directory&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1801843263675950396?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1801843263675950396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1801843263675950396&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1801843263675950396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1801843263675950396'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2012/01/unblock-multiple-downloaded-files.html' title='Unblock Multiple Downloaded Files'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-3994497342801923329</id><published>2011-12-24T12:03:00.001Z</published><updated>2011-12-24T12:07:04.366Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Recipes'/><title type='text'>Vegetarian Paella</title><content type='html'>* 150 g (5.3 oz) of Arborio Rice &lt;br /&gt;* 540 ml Vegetable stock (homemade or made with a stock cube) &lt;br /&gt;* 1/2 tsp Paprika &lt;br /&gt;* 1/2 tsp Tumeric &lt;br /&gt;* 2 cloves of garlic, crushed or finely chopped &lt;br /&gt;* Rapeseed or Olive oil for frying &lt;br /&gt;* Cooked and sliced vegetarian sausages (optional) &lt;br /&gt;* Either of the following vegetables (on their own or in combination) : onions, shallots, leeks, peas, mushroom, aubergine, carrot, parsnip, green beans, sweetcorn, peppers, courgette, tomatoes. &lt;br /&gt;* Tastes great with additional spices such as 1 tsp curry powder &lt;br /&gt;&lt;br /&gt;In a large non-stick saucepan, sauté pan or wok, heat a small amount of oil. &lt;br /&gt;&lt;br /&gt;Fry your choice of diced/sliced vegetables for 5 mins. &lt;br /&gt;&lt;br /&gt;Add the garlic and fry for a further 5 minuts. &lt;br /&gt;&lt;br /&gt;Add the rice and fry for 2 minutes, whilst stirring continuously. &lt;br /&gt;&lt;br /&gt;Add all the vegetable stock. &lt;br /&gt;&lt;br /&gt;Add the paprika, tumeric and any other spices you choose to include. &lt;br /&gt;&lt;br /&gt;Stir whilst bringing to the boil, and simmer for 15 minutes, stirring every 4-5 minutes. &lt;br /&gt;&lt;br /&gt;Add the sliced cooked vegetarian sausages (if using) and continue to cook for a further 5-10 minutes &lt;br /&gt;&lt;br /&gt;Once all the water has been absorbed, the paella is ready to serve.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-3994497342801923329?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/3994497342801923329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=3994497342801923329&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3994497342801923329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3994497342801923329'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/12/vegetarian-paella.html' title='Vegetarian Paella'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-9196919429317865422</id><published>2011-12-21T18:11:00.000Z</published><updated>2011-12-21T18:18:32.966Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Recipes'/><title type='text'>Red Cabbage with Apple</title><content type='html'>1 medium red cabbage &lt;br /&gt;1 apple, cored and roughly chopped &lt;br /&gt;40g butter and glug of olive oil approx.&lt;br /&gt;2 tsps.sea salt and few grinds of black pepper&lt;br /&gt;3 bay leaves &lt;br /&gt;4 cloves &lt;br /&gt;100 ml. white wine vinegar &lt;br /&gt;25g sugar&lt;br /&gt;&lt;br /&gt;1. Cut the cabbage in half lengthways and remove the white core. &lt;br /&gt;&lt;br /&gt;2. Shred it finely from top to bottom then rinse it well - let it drain. &lt;br /&gt;&lt;br /&gt;3. Using a heavy-bottomed saucepan, large enough to accommodate the amount of cabbage, add the butter with the olive oil. As it begins to melt, throw in the cabbage and apple. Add a little water, the bayleaves and seasoning.&lt;br /&gt;&lt;br /&gt;4. Cook - stirring almost all the time, so it doesn't stick or burn, adding a little more water if necessary - approx. 10 mins. &lt;br /&gt;&lt;br /&gt;5. Add the vinegar, dont lean over the pan as the steam will be very sharp, and cook, stirring until all the vinegar has evaporated. &lt;br /&gt;&lt;br /&gt;6. Sprinkle in your sugar and continue stirring, as it could caramelise and burn very quickly. Cook about another 5 mins. &lt;br /&gt;&lt;br /&gt;Taste for seasoning - should be done and the colour a lovely dark red ..... not the icky grey you get with long cooking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-9196919429317865422?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/9196919429317865422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=9196919429317865422&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9196919429317865422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9196919429317865422'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/12/red-cabbage-with-apple.html' title='Red Cabbage with Apple'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8568831660967252902</id><published>2011-12-21T17:11:00.001Z</published><updated>2011-12-21T17:13:29.086Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Recipes'/><title type='text'>Leek Colcannon</title><content type='html'>* 1kg/2lb 3oz floury potatoes, such as King Edward or Maris Piper, peeled and cut into large chunks&lt;br /&gt;* 250ml/9fl oz milk&lt;br /&gt;* 500g/17½oz leeks, washed and cut into rounds&lt;br /&gt;* 2 tbsp butter&lt;br /&gt;* 1 tbsp double cream&lt;br /&gt;* sea salt flakes and white pepper&lt;br /&gt;&lt;br /&gt;Cook the potatoes in a pan of simmering water for 15-20 minutes, or until the potatoes are tender. Drain the potatoes and set aside. &lt;br /&gt;&lt;br /&gt;In a separate pan, bring the milk to a simmer and poach the leeks for 4-5 minutes, or until tender. Drain the leeks, reserving a few tablespoons of the milk. &lt;br /&gt;Mash the potatoes and fold in the butter and the cream. Add the leeks and a few tablespoons of the reserved milk and mash together until creamy. Season, to taste, with sea salt and white pepper.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8568831660967252902?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8568831660967252902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8568831660967252902&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8568831660967252902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8568831660967252902'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/12/leek-colcannon.html' title='Leek Colcannon'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-568997823901717818</id><published>2011-12-13T19:04:00.003Z</published><updated>2011-12-21T17:11:10.366Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Recipes'/><title type='text'>Yellow Split Pea Dahl Recipe with Potatoes and Coconut Milk</title><content type='html'>&lt;div&gt;1 cup yellow split peas &lt;/div&gt;&lt;div&gt;1 can coconut milk &lt;/div&gt;&lt;div&gt;1 tablespoon curry powder &lt;/div&gt;&lt;div&gt;2 russet potatoes &lt;/div&gt;&lt;div&gt;salt &lt;/div&gt;&lt;div&gt;pepper &lt;/div&gt;&lt;div&gt;1/3 cup yoghurt&lt;/div&gt;&lt;div&gt;for garnish cilantro, minced for garnish &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;1. Pick over lentils and rinse.  &lt;/div&gt;&lt;div&gt;2. In a heavy pot with a lid combine peas, milk curry powder and one cup of water.  Bring to a boil then reduce to a simmer. &lt;/div&gt;&lt;div&gt;3. Partially cover the pot and let cook for 15 minutes, stirring occasionally.  &lt;/div&gt;&lt;div&gt;4. Peel potatoes and chop into large chunks. Add potatoes to the pot and cover, cook for 10 minutes.   Give it a good stir and add a big pinch of salt.   Continue cooking until lentils and potatoes are tender, if it seems dry you can add a bit more water.  &lt;/div&gt;&lt;div&gt;5. When tender add a big grinding of fresh pepper and adjust for salt.  Serve topped with yogourt and fresh cilantro. &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Prep Time: 15 minutes Cooking Time: 45 minutes Total Time: 60 minutes &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-568997823901717818?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/568997823901717818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=568997823901717818&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/568997823901717818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/568997823901717818'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/12/yellow-split-pea-dahl-recipe-with.html' title='Yellow Split Pea Dahl Recipe with Potatoes and Coconut Milk'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-6523122304908905778</id><published>2011-11-20T19:42:00.004Z</published><updated>2011-11-20T19:49:13.298Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Some Useful DOS Commands</title><content type='html'>&lt;div&gt;Some useful commands I don't use often enough to remember:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;CLS - Clear Screen&lt;/li&gt;&lt;li&gt;WMIC QFE List Full - List Windows Service Packs and Patches&lt;/li&gt;&lt;li&gt;Help - DOS Commands Help&lt;/li&gt;&lt;li&gt;SystemInfo - System Info&lt;/li&gt;&lt;li&gt;Dir "filenamesearch" /s - Search for filenames with string&lt;/li&gt;&lt;li&gt;FindStr "filecontentsearch" *.* - Search within files for string&lt;/li&gt;&lt;li&gt;NET Session - connected sessions&lt;/li&gt;&lt;li&gt;NET LocalGroup - local groups&lt;/li&gt;&lt;li&gt;WhoAmI /all - Information about current user, environment etc.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-6523122304908905778?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/6523122304908905778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=6523122304908905778&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6523122304908905778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6523122304908905778'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/11/some-useful-dos-commands.html' title='Some Useful DOS Commands'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4701471745880744101</id><published>2011-10-20T15:54:00.001+01:00</published><updated>2011-11-11T16:15:37.684Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Install Telnet Client</title><content type='html'>To install Telnet Client by using a command line&lt;br /&gt;1.Open a command prompt window. Click Start, type cmd in the Start Search box, and then press ENTER.&lt;br /&gt;&lt;br /&gt;2.Type the following command:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pkgmgr /iu:"TelnetClient"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;http://technet.microsoft.com/en-us/library/cc771275(WS.10).aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-4701471745880744101?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4701471745880744101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4701471745880744101&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4701471745880744101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4701471745880744101'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/10/install-telnet-client.html' title='Install Telnet Client'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-978085844883404554</id><published>2011-10-11T10:11:00.001+01:00</published><updated>2011-10-11T10:14:21.981+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='BAT'/><title type='text'>Execute VBScript or Batch File from C#</title><content type='html'>Can never remember the correct syntax to get this working properly:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;System.Diagnostics.Process proc = new System.Diagnostics.Process();&lt;br /&gt;proc.StartInfo.FileName = fileName;&lt;br /&gt;proc.StartInfo.RedirectStandardError = true;&lt;br /&gt;proc.StartInfo.RedirectStandardOutput = true;&lt;br /&gt;proc.StartInfo.UseShellExecute = false;&lt;br /&gt;proc.Start();&lt;br /&gt;proc.WaitForExit();&lt;br /&gt;var error = proc.StandardError.ReadToEnd();&lt;br /&gt;proc.WaitForExit();&lt;br /&gt;var output = proc.StandardOutput.ReadToEnd();&lt;br /&gt;proc.WaitForExit();&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-978085844883404554?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/978085844883404554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=978085844883404554&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/978085844883404554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/978085844883404554'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/10/execute-vbscript-or-batch-file-from-c.html' title='Execute VBScript or Batch File from C#'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-474440618762778136</id><published>2011-10-10T09:17:00.002+01:00</published><updated>2011-10-10T09:22:07.839+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coffeescript'/><title type='text'>Coffeescript 101</title><content type='html'>&lt;strong&gt;Resources&lt;/strong&gt;:&lt;br /&gt;Website: &lt;a href="coffeescript.org"&gt;coffeescript.org&lt;/a&gt;&lt;br /&gt;Book: &lt;a href="http://pragprog.com/book/tbcoffee/coffeescript"&gt;CoffeScript by Trevor Burnham&lt;/a&gt;&lt;br /&gt;VS Plugin: &lt;a href="http://www.mindscapehq.com/products/web-workbench"&gt;Mindscape Web Workbench Extension&lt;/a&gt;&lt;br /&gt;Windows Compiler: &lt;a href="bit.ly/coffeewin"&gt;bit.ly/coffeewin&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Other Stuff&lt;/strong&gt;:&lt;br /&gt;Nancy: &lt;a href="nancyfx.org"&gt;nancyfx.org&lt;/a&gt;&lt;br /&gt;Knockout: &lt;a href="knockoutjs.com"&gt;knockoutjs.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Taken from the handout at &lt;a href="http://www.developerdeveloperdeveloper.com/north/"&gt;DDDNorth&lt;/a&gt; by &lt;a href="http://twitter.com/markrendle"&gt;@markrendle&lt;/a&gt;. Copying it here as I don't keep pieces of paper...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-474440618762778136?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/474440618762778136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=474440618762778136&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/474440618762778136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/474440618762778136'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/10/coffeescript-101.html' title='Coffeescript 101'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8842878447837616955</id><published>2011-10-05T15:15:00.002+01:00</published><updated>2011-10-05T15:36:56.023+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MSIEXEC'/><title type='text'>MSIEXEC Application GUID</title><content type='html'>Can never remember where to find the GUID, hopefully this will remind me:&lt;br /&gt;&lt;br /&gt;Search in REGEDIT in the following location for the name of the application:&lt;br /&gt;&lt;br /&gt;  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8842878447837616955?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8842878447837616955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8842878447837616955&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8842878447837616955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8842878447837616955'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/10/msiexec-application-guid.html' title='MSIEXEC Application GUID'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4277105257013534640</id><published>2011-09-14T10:28:00.002+01:00</published><updated>2011-09-14T10:28:58.272+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Shutdown Command Switches</title><content type='html'>Putting this here as I can never get the switch syntax right first time round:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;shutdown /r /d p:2:18 /c "Windows Updates"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-4277105257013534640?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4277105257013534640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4277105257013534640&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4277105257013534640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4277105257013534640'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/09/shutdown-command-switches.html' title='Shutdown Command Switches'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8464259834550841006</id><published>2011-05-29T22:11:00.001+01:00</published><updated>2011-05-29T22:12:52.454+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Client Requirements</title><content type='html'>&lt;div&gt;Liked this quote:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"People are not interested what cannot be done so let them know what can and by when"&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8464259834550841006?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8464259834550841006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8464259834550841006&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8464259834550841006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8464259834550841006'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/05/client-requirements.html' title='Client Requirements'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-2629239316382214241</id><published>2011-03-23T09:21:00.001Z</published><updated>2011-03-23T09:23:15.884Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Extending Windows Server 2008 Disk with diskpart</title><content type='html'>Launch cmd as Administrator:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" &gt;diskpart&lt;br /&gt;rescan&lt;br /&gt;list volume&lt;br /&gt;select volume N  (where N is chosen from the list)&lt;br /&gt;extend&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-2629239316382214241?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/2629239316382214241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=2629239316382214241&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2629239316382214241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2629239316382214241'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/03/extending-windows-server-2008-disk-with.html' title='Extending Windows Server 2008 Disk with diskpart'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-3186548814718338247</id><published>2011-03-21T21:09:00.003Z</published><updated>2011-03-21T21:20:55.436Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virtualization'/><title type='text'>Application Virtualisation Benefits</title><content type='html'>&lt;ul&gt;&lt;li&gt;Increased automation of processes and reduced end user impact when deploying, patching, updating and decommissioning applications&lt;/li&gt;&lt;li&gt;Accelerated delivery of applications as streamed on-demand services - no reboots, no waiting for installs, no uninstalls, reduced image footprint &lt;/li&gt;&lt;li&gt;Only 20 to 40% of total code required to start the program from a central server - subsequent uses have instant access from cache and do not require a network connection - application settings and profile are also cached&lt;/li&gt;&lt;li&gt;Better management and control of desktop environments&lt;/li&gt;&lt;li&gt;Remove ties from users to computers&lt;/li&gt;&lt;li&gt;Reduced complexity for OS and application migrations, security refreshes and disaster recovery&lt;/li&gt;&lt;li&gt;Isolation to allow multiple application versions to co-exist&lt;/li&gt;&lt;li&gt;Increased security by preventing access to applications even when computer is disconnected from network&lt;/li&gt;&lt;li&gt;No learning curve for users as application are accessed as if installed direct on desktop&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-3186548814718338247?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/3186548814718338247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=3186548814718338247&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3186548814718338247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3186548814718338247'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/03/application-virtualisation-benefits.html' title='Application Virtualisation Benefits'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8317525530979606735</id><published>2011-02-21T10:27:00.002Z</published><updated>2011-02-21T10:30:07.873Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Using Remote Desktop with Dual Monitors</title><content type='html'>Not sure how I've managed without this before, but was frustrated trying to use Visual Studio via RDP on a single monitor. Had a quick Google and discovered the /span switch for MSTSC. So now I can run "mstsc /v:machinename /span" and we have RDP across dual monitors!&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://www.splitview.com/using-remote-desktop-with-dual-monitors-in-span-mode"&gt;Using Remote Desktop with Dual Monitors&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8317525530979606735?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8317525530979606735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8317525530979606735&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8317525530979606735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8317525530979606735'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/02/using-remote-desktop-with-dual-monitors.html' title='Using Remote Desktop with Dual Monitors'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-3385547731753687957</id><published>2011-02-10T14:19:00.001Z</published><updated>2011-02-10T14:20:38.542Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server - Database Restore History</title><content type='html'>A handy script to see which databases have been restored, when, from where etc.&lt;div&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;DECLARE @dbname sysname, @days int&lt;br /&gt;SET @dbname = NULL &lt;br /&gt;SET @days = -30&lt;br /&gt;SELECT&lt;br /&gt;rsh.destination_database_name AS [Database],&lt;br /&gt;rsh.user_name AS [Restored By],&lt;br /&gt;CASE WHEN rsh.restore_type = 'D' THEN 'Database'&lt;br /&gt;  WHEN rsh.restore_type = 'F' THEN 'File'&lt;br /&gt;  WHEN rsh.restore_type = 'G' THEN 'Filegroup'&lt;br /&gt;  WHEN rsh.restore_type = 'I' THEN 'Differential'&lt;br /&gt;  WHEN rsh.restore_type = 'L' THEN 'Log'&lt;br /&gt;  WHEN rsh.restore_type = 'V' THEN 'Verifyonly'&lt;br /&gt;  WHEN rsh.restore_type = 'R' THEN 'Revert'&lt;br /&gt;  ELSE rsh.restore_type &lt;br /&gt; END AS [Restore Type],&lt;br /&gt;rsh.restore_date AS [Restore Started],&lt;br /&gt;bmf.physical_device_name AS [Restored From], &lt;br /&gt; rf.destination_phys_name AS [Restored To]&lt;br /&gt;FROM msdb.dbo.restorehistory rsh&lt;br /&gt;INNER JOIN msdb.dbo.backupset bs ON rsh.backup_set_id = bs.backup_set_id&lt;br /&gt;INNER JOIN msdb.dbo.restorefile rf ON rsh.restore_history_id = rf.restore_history_id&lt;br /&gt;INNER JOIN msdb.dbo.backupmediafamily bmf ON bmf.media_set_id = bs.media_set_id&lt;br /&gt;WHERE rsh.restore_date &amp;gt;= DATEADD(dd, ISNULL(@days, -30), GETDATE()) --want to search for previous days&lt;br /&gt;AND destination_database_name = ISNULL(@dbname, destination_database_name) --if no dbname, then return all&lt;br /&gt;ORDER BY rsh.restore_history_id DESC&lt;br /&gt;GO&lt;br /&gt;&lt;/code&gt;&lt;/pre&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/3354578112415392473-3385547731753687957?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/3385547731753687957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=3385547731753687957&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3385547731753687957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3385547731753687957'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/02/sql-server-database-restore-history.html' title='SQL Server - Database Restore History'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7425472542840522078</id><published>2011-02-05T16:09:00.002Z</published><updated>2011-02-05T17:06:39.510Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>User Account Control (UAC)</title><content type='html'>&lt;div&gt;UAC enables users to perform common tasks as standard users and as administrators without having to switch users, log off, or use Run As. When an administrator logs on the user is assigned two separate access tokens containing their group membership and authorization and access control data. Without UAC an administrator account can be utilised by malicious software for silent installation or infection of core operating system files. The full administrator access token is not invoked until the user attempts to perform an administrative task. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;To request an application to run elevated one time&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Start an application that is likely to have been assigned an administrative token, such as Microsoft Windows Disk Cleanup. A User Account Control prompt is displayed. Verify that the details presented match the request you initiated then click Continue to start the application&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;To configure an application to always run elevated&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Right-click an application that is not likely to have been assigned an administrative token, such as a word processing application. Click Properties, and then select the Compatibility tab. Under Privilege Level, select Run this program as an administrator, and then click OK.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The behaviour of UAC can be configured by Group Policy, however UAC and its Admin Approval Mode are enabled by default.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;To turn off UAC&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. In Control Panel, click User Accounts.&lt;/div&gt;&lt;div&gt;2. In the User Accounts window, click User Accounts.&lt;/div&gt;&lt;div&gt;3. In the User Accounts tasks window, click Turn User Account Control on or off.&lt;/div&gt;&lt;div&gt;4. If UAC is currently configured in Admin Approval Mode, the User Account Control message appears. Click Continue.&lt;/div&gt;&lt;div&gt;5. Clear the Use User Account Control (UAC) to help protect your computer check box, and then click OK.&lt;/div&gt;&lt;div&gt;6. Click Restart Now to apply the change right away, or click Restart Later and close the User Accounts tasks window.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;To disable Admin Approval Mode&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. Click Start, click All Programs, click Accessories, click Run, type secpol.msc in the Open box, and then click OK.&lt;/div&gt;&lt;div&gt;2. If the User Account Control dialog box appears, confirm that the action it displays is what you want, and then click Continue.&lt;/div&gt;&lt;div&gt;3. From the Local Security Settings console tree, double-click Local Policies, and then double-click Security Options.&lt;/div&gt;&lt;div&gt;4. Scroll down and double-click User Account Control: Run all administrators in Admin Approval Mode.&lt;/div&gt;&lt;div&gt;5. Select the Disabled option, and then click OK.&lt;/div&gt;&lt;div&gt;6. Close the Local Security Settings window&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;To disable UAC from prompting for credentials to install applications&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. Click Start, click All Programs, click Accessories, click Run, type secpol.msc in the Open text box, and then click OK.&lt;/div&gt;&lt;div&gt;2. From the Local Security Settings console tree, click Local Policies, and then Security Options.&lt;/div&gt;&lt;div&gt;3. Scroll down and double-click User Account Control: Detect application installations and prompt for elevation.&lt;/div&gt;&lt;div&gt;4. Select the Disabled option, and then click OK.&lt;/div&gt;&lt;div&gt;5. Close the Local Security Settings window&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;To change the elevation prompt behavior for administrators&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. Click Start, click Accessories, click Run, type secpol.msc in the Open box, and then click OK.&lt;/div&gt;&lt;div&gt;2. From the Local Security Settings console tree, click Local Policies, and then Security Options.&lt;/div&gt;&lt;div&gt;3. Scroll down to and double-click User Account Control: Behavior of the elevation prompt for administrators.&lt;/div&gt;&lt;div&gt;4. From the drop-down menu, select one of the following settings:&lt;/div&gt;&lt;div&gt;5. Elevate without prompting (tasks requesting elevation will automatically run as elevated without prompting the administrator)&lt;/div&gt;&lt;div&gt;6. Prompt for credentials (this setting requires user name and password input before an application or task will run as elevated)&lt;/div&gt;&lt;div&gt;7. Prompt for consent (default setting for administrators)&lt;/div&gt;&lt;div&gt;8. Click OK. &lt;/div&gt;&lt;div&gt;9. Close the Local Security Settings window.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;To change the elevation prompt behavior for standard users&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. Click Start, click Accessories, click Run, type secpol.msc in the Open box, and then click OK.&lt;/div&gt;&lt;div&gt;2. From the Local Security Settings console tree, click Local Policies, and then Security Options.&lt;/div&gt;&lt;div&gt;3. Scroll down to and double-click User Account Control: Behavior of the elevation prompt for standard users.&lt;/div&gt;&lt;div&gt;4. From the drop-down menu, select one of the following settings:&lt;/div&gt;&lt;div&gt;5. Automatically deny elevation requests (standard users will not be able to run programs requiring elevation, and will not be prompted)&lt;/div&gt;&lt;div&gt;6. Prompt for credentials (this setting requires user name and password input before an application or task will run as elevated, and is the default for standard users)&lt;/div&gt;&lt;div&gt;7. Click OK.&lt;/div&gt;&lt;div&gt;8. Close the Local Security Settings window&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See: &lt;a href="http://technet.microsoft.com/en-us/library/cc709691(WS.10).aspx"&gt;User Account Control Step-by-Step Guide&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/3354578112415392473-7425472542840522078?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7425472542840522078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7425472542840522078&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7425472542840522078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7425472542840522078'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/02/user-account-control-uac.html' title='User Account Control (UAC)'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7832246682704589984</id><published>2011-02-02T08:13:00.003Z</published><updated>2011-02-02T09:22:50.885Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Stored Procedures'/><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework'/><title type='text'>Entity Framework - Stored Procedures with Scalar Output Values</title><content type='html'>Yesterday was the time I needed to execute a Stored Procedure with EF4. My immediate thoughts were "no problem", I'll just pull in the Stored Procedure with the EF designer, which will create the &lt;a href="http://msdn.microsoft.com/en-us/library/cc716710.aspx"&gt;FunctionImport&lt;/a&gt; and then I'll Google with Bing for the syntax to make the call and away we go...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The sproc in question accepts a single input parameter and returns two output &lt;a href="http://en.wikipedia.org/wiki/Scalar_(computing)"&gt;scalar&lt;/a&gt; values and to my frustration I soon discovered that EF currently supports sproc calls that return an Entity Type, but not sproc that return scalar values.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I again Googled with Bing to find a solution or workaround and discovered a few suggestions. A few posts such as &lt;a href="http://www.timacheson.com/Blog/2009/jul/entity_framework_stored_procedure_with_output_parameter"&gt;this one&lt;/a&gt; suggest altering the sproc to return a simple entity e.g. &lt;span class="Apple-style-span" style="color: rgb(105, 105, 105); font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; "&gt;&lt;span &gt;SELECT&lt;/span&gt; @Id &lt;span &gt;=&lt;/span&gt; &lt;span &gt;SCOPE_IDENTITY&lt;/span&gt;&lt;span &gt;()&lt;/span&gt; &lt;span &gt;AS&lt;/span&gt; Id;&lt;/span&gt; Others suggest using the &lt;a href="http://code.msdn.microsoft.com/EFExtensions"&gt;EFExtensions&lt;/a&gt; or upgrading to EF4 which apparently &lt;a href="http://www.danrigsby.com/blog/index.php/2009/05/20/entity-framework-40-scalar-and-void-functions/"&gt;supports this directly&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The sproc is in a legacy database which I could not alter and the EFExtensions or upgrading to EF4 seemed like overkill to make a single simple sproc call.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I eventually settled on making the call directly as follows:&lt;/div&gt;&lt;div&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;EntityConnection entityConnection = (EntityConnection)context.Connection;&lt;br /&gt;DbConnection storeConnection = entityConnection.StoreConnection;&lt;br /&gt;DbCommand command = storeConnection.CreateCommand();&lt;br /&gt;command.CommandText = &amp;quot;MY_STORED_PROCEDURE&amp;quot;;&lt;br /&gt;command.CommandType = CommandType.StoredProcedure;&lt;br /&gt;SqlParameter idParam = new SqlParameter(&amp;quot;p_id&amp;quot;, SqlDbType.Float);&lt;br /&gt;idParam.Value = myInputValue;&lt;br /&gt;SqlParameter treeParam = new SqlParameter(&amp;quot;p_tree&amp;quot;, SqlDbType.VarChar, -1);&lt;br /&gt;treeParam.Direction = ParameterDirection.Output;&lt;br /&gt;SqlParameter privateParam = new SqlParameter(&amp;quot;p_private&amp;quot;, SqlDbType.VarChar, -1);&lt;br /&gt;privateParam.Direction = ParameterDirection.Output;&lt;br /&gt;command.Parameters.Add(idParam);&lt;br /&gt;command.Parameters.Add(treeParam);&lt;br /&gt;command.Parameters.Add(privateParam);&lt;br /&gt;DbDataReader reader = command.ExecuteReader();&lt;br /&gt;Console.WriteLine(treeParam.Value);&lt;br /&gt;Console.WriteLine(privateParam.Value);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I think a move to EF4 is required sooner rather than later...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-7832246682704589984?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7832246682704589984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7832246682704589984&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7832246682704589984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7832246682704589984'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/02/entity-framework-stored-procedures-with.html' title='Entity Framework - Stored Procedures with Scalar Output Values'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1970312711828442538</id><published>2011-01-27T11:27:00.000Z</published><updated>2011-01-27T11:27:44.945Z</updated><title type='text'>Gareth Hill is fundraising for ME Association</title><content type='html'>&lt;a href="http://www.justgiving.com/lejog-2011"&gt;Gareth Hill is fundraising for ME Association&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've had a crazy moment and agreed to do LEJOG (Lands End to John O'Groats) this year - May 2011. This involves cycling 1000 miles in 1o days so please give generously...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1970312711828442538?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.justgiving.com/lejog-2011' title='Gareth Hill is fundraising for ME Association'/><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1970312711828442538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1970312711828442538&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1970312711828442538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1970312711828442538'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/gareth-hill-is-fundraising-for-me.html' title='Gareth Hill is fundraising for ME Association'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7860227381997100998</id><published>2011-01-24T16:04:00.002Z</published><updated>2011-01-24T16:14:42.923Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>The Invention of Money</title><content type='html'>Episode 423 of &lt;a href="http://ax.itunes.apple.com/gb/podcast/this-american-life/id201671138"&gt;This American Life&lt;/a&gt; features insightful analysis of money and the economy. I made the following notes whilst listening to the podcast to help it sink in. Well worth a listen!&lt;br /&gt;&lt;br /&gt;When x number of dollars are lost on the stock market or when the housing market collapses, where does that money go? The answer: money is fiction, it's value can simply disappear. Money is simply worth what people agree it is.&lt;br /&gt;&lt;br /&gt;Can we track how much money is in circulation? It would be an infinite series of calculations between savers, banks and lenders.&lt;br /&gt;&lt;br /&gt;Money started with the exchange of gold, then came paper bills which represented the amount of gold held in banks. In 1933 the gold standard ended and paper bills simply became the idea of money. Now money often does not change hands or even exist, we just exchange electronic numbers or information when we are paid or buy things online.&lt;br /&gt;&lt;br /&gt;In Brazil in 1990 inflation was 80% a month. Prices were increasing every day. To pay for the building of Brasilia in 1950 the government began printing money and inflation began. Successive governments made attempts to fix the problem such as price freezes or confiscation of money. Four economists were approached in 1993 to address the root causes of the problem: the printing of money and importantly people's faith in money. People needed to be tricked into thinking money had value. A new virtual currency &lt;a href="http://en.wikipedia.org/wiki/Unidade_real_de_valor"&gt;URV&lt;/a&gt; Unit of Real Value was introduced. People were paid in URV and prices were in URV. The rate to exchange URV to cruzeiros would change daily as advertised by the bank, but prices would stay the same so that people would start to think in URV. Once things settled down the Real was introduced with the same value as URV and from that day the virtual currency became real and the people believed in it's value stabilising the economy.&lt;br /&gt;&lt;br /&gt;In most modern countries the people who decide how much money there should be by creating or removing money is the &lt;a href="http://en.wikipedia.org/wiki/Central_bank"&gt;central bank&lt;/a&gt; e.g. the Federal Reserve in USA, the Bank of England in the UK. This is an independent institution and cannot be controlled by the government. The balancing act between sufficient money to loan to businesses and create jobs and not too much money as to increase inflation is voted upon and decided by the central bank. To increase the amount of money in the economy treasury bonds are purchased from the banks by the central bank. The banks will then loan this newly created money out to people typically at a lower interest rate. The central bank also has the power to become the lender of last resort "opening the fed window" by providing emergency loans to banks&lt;br /&gt;and large corporations to prevent the banking system from collapse. The central bank will demand assets in return for these emergency loans, however recently the central bank has taken on potentially toxic assets such as mortgage backed securities. Any losses occurred from the central banks risky investments do not become part of the&lt;br /&gt;government deficit as they are separate entities. In fact the central bank always make a profit and any reserves are granted to government to reduce the deficit. The creation of money via the central bank comes with the risk of devaluing money causing huge inflation like in Brazil pre-URV and the Real.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-7860227381997100998?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7860227381997100998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7860227381997100998&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7860227381997100998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7860227381997100998'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/invention-of-money.html' title='The Invention of Money'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5793708826335308493</id><published>2011-01-18T09:09:00.003Z</published><updated>2011-01-18T09:18:40.555Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='Active Directory'/><title type='text'>PowerShell with Exchange 2003</title><content type='html'>We recently had a requirement to discover the details of exceptional mailboxes in Exchange 2003. We were aware of the Management Tools and in particular the Management Shell for Exchange 2007 which allows you to query mailbox information with a range of PowerShell commands, however we were not aware that you could use the 2007 tools to query 2003 data. In hindsight it makes sense as the data we were looking to query is held in Active Directory!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The particular scenario we were looking to find was where the UseDatabaseRetentionDefaults property is set to False. We had discovered 1 mailbox which met this criteria and the RetainDeletedItemsFor property was also set to 0, therefore once a mail item was deleted it was gone. The following command quickly output all of the mailboxes in this scenario:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; "&gt;[PS] C:\WINDOWS\system32&gt;Get-Mailbox | Where {$_.UseDatabaseRetentionDefaults -eq $False} | select Name,UseDatabaseRetentionDefaults,RetainDeletedItemsFor | Export-Csv C:\UseDatabaseRetentionDefaults.csv&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This web page has some other useful queries for finding other exceptional mailboxes in Exchange with both LDAP queries and the Management Tools: &lt;a href="http://exchangeshare.wordpress.com/2008/06/11/find-exceptional-mailboxes-in-the-exchange-environment/"&gt;Find Exceptional Mailboxes in Exchange Environment&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6be38633-7248-4532-929b-76e9c677e802&amp;amp;displaylang=en"&gt;Microsoft Exchange Server 2007 Management Tools (32-Bit)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5793708826335308493?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5793708826335308493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5793708826335308493&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5793708826335308493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5793708826335308493'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/powershell-with-exchange-2003.html' title='PowerShell with Exchange 2003'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5184694598192596319</id><published>2011-01-11T14:58:00.003Z</published><updated>2011-01-11T15:05:33.043Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server - Cannot resolve collation conflict for UNION operation</title><content type='html'>Ever tried to UNION two SELECT statement from tables/databases with different collations and hit the error: "Cannot resolve collation conflict for UNION operation"?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Me neither until today - managed to workaround it with help of the examples &lt;a href="http://www.sqlservercentral.com/Forums/Topic676343-145-1.aspx"&gt;posted here&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;DROP TABLE CollationTest1&lt;br /&gt;CREATE TABLE [dbo].[CollationTest1](&lt;br /&gt;     [CT1ID] [int] IDENTITY(1,1) NOT NULL,&lt;br /&gt;     [CT1] [varchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS&lt;br /&gt;) ON [PRIMARY]&lt;br /&gt;&lt;br /&gt;INSERT INTO CollationTest1 (CT1) VALUES ('varchar string 1 in CT1')&lt;br /&gt;INSERT INTO CollationTest1 (CT1) VALUES ('varchar string 2 in CT1')&lt;br /&gt;INSERT INTO CollationTest1 (CT1) VALUES ('varchar string 3 in CT1')&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;DROP TABLE CollationTest2&lt;br /&gt;CREATE TABLE [dbo].[CollationTest2](&lt;br /&gt;     [CT2ID] [int] IDENTITY(1,1) NOT NULL,&lt;br /&gt;     [CT2] [varchar](30) COLLATE SQL_Latin1_General_Cp437_BIN&lt;br /&gt;) ON [PRIMARY]&lt;br /&gt;&lt;br /&gt;INSERT INTO CollationTest2 (CT2) VALUES ('varchar string 1 in CT2')&lt;br /&gt;INSERT INTO CollationTest2 (CT2) VALUES ('varchar string 2 in CT2')&lt;br /&gt;INSERT INTO CollationTest2 (CT2) VALUES ('varchar string 3 in CT2')&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;-- unmatched collation&lt;br /&gt;SELECT CT1ID, CT1&lt;br /&gt;FROM CollationTest1&lt;br /&gt;UNION&lt;br /&gt;SELECT CT2ID, CT2&lt;br /&gt;FROM CollationTest2&lt;br /&gt;/*&lt;br /&gt;Msg 446, Level 16, State 9, Line 1&lt;br /&gt;Cannot resolve collation conflict for UNION operation.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;-- unmatched collation&lt;br /&gt;SELECT CT1ID, CT1, CT2&lt;br /&gt;FROM CollationTest1&lt;br /&gt;INNER JOIN CollationTest2 ON CT1ID = CT2ID&lt;br /&gt;WHERE LEFT(CT1, 1) = LEFT(CT2, 1)&lt;br /&gt;/*&lt;br /&gt;Msg 446, Level 16, State 9, Line 1&lt;br /&gt;Cannot resolve collation conflict for equal to operation.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;-- Force column CollationTest1.CT1 to match collation of CollationTest2.CT2&lt;br /&gt;SELECT CT1ID, CT1 COLLATE SQL_Latin1_General_Cp437_BIN&lt;br /&gt;FROM CollationTest1&lt;br /&gt;UNION&lt;br /&gt;SELECT CT2ID, CT2&lt;br /&gt;FROM CollationTest2&lt;br /&gt;/*&lt;br /&gt;Results:&lt;br /&gt;CT1ID   CT1&lt;br /&gt;1               varchar string 1 in CT1&lt;br /&gt;2               varchar string 2 in CT1&lt;br /&gt;3               varchar string 3 in CT1&lt;br /&gt;1               varchar string 1 in CT2&lt;br /&gt;2               varchar string 2 in CT2&lt;br /&gt;3               varchar string 3 in CT2&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Force column CollationTest2.CT2 to match collation of CollationTest1.CT1&lt;br /&gt;SELECT CT1ID, CT1&lt;br /&gt;FROM CollationTest1&lt;br /&gt;UNION ALL&lt;br /&gt;SELECT CT2ID, CT2 COLLATE SQL_Latin1_General_CP1_CI_AS&lt;br /&gt;FROM CollationTest2&lt;br /&gt;/*&lt;br /&gt;Results:&lt;br /&gt;CT1ID   CT1&lt;br /&gt;1               varchar string 1 in CT1&lt;br /&gt;2               varchar string 2 in CT1&lt;br /&gt;3               varchar string 3 in CT1&lt;br /&gt;1               varchar string 1 in CT2&lt;br /&gt;2               varchar string 2 in CT2&lt;br /&gt;3               varchar string 3 in CT2&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- matched collation&lt;br /&gt;SELECT CT1ID, CT1, CT2&lt;br /&gt;FROM CollationTest1&lt;br /&gt;INNER JOIN CollationTest2 ON CT1ID = CT2ID&lt;br /&gt;WHERE LEFT(CT1 COLLATE SQL_Latin1_General_Cp437_BIN, 1) = LEFT(CT2, 1)&lt;br /&gt;/*&lt;br /&gt;Results:&lt;br /&gt;CT1ID   CT1                                             CT2&lt;br /&gt;1               varchar string 1 in CT1 varchar string 1 in CT2&lt;br /&gt;2               varchar string 2 in CT1 varchar string 2 in CT2&lt;br /&gt;3               varchar string 3 in CT1 varchar string 3 in CT2&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- matched collation&lt;br /&gt;SELECT CT1ID, CT1, CT2&lt;br /&gt;FROM CollationTest1&lt;br /&gt;INNER JOIN CollationTest2 ON CT1ID = CT2ID&lt;br /&gt;WHERE LEFT(CT1, 1) = LEFT(CT2 COLLATE SQL_Latin1_General_CP1_CI_AS, 1)&lt;br /&gt;/*&lt;br /&gt;Results:&lt;br /&gt;CT1ID   CT1                                             CT2&lt;br /&gt;1               varchar string 1 in CT1 varchar string 1 in CT2&lt;br /&gt;2               varchar string 2 in CT1 varchar string 2 in CT2&lt;br /&gt;3               varchar string 3 in CT1 varchar string 3 in CT2&lt;br /&gt;*/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;I also discovered &lt;a href="http://msdn.microsoft.com/en-us/library/ms187335.aspx"&gt;sp_help&lt;/a&gt; which is handy to query the collation of objects.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5184694598192596319?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5184694598192596319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5184694598192596319&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5184694598192596319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5184694598192596319'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/sql-server-cannot-resolve-collation.html' title='SQL Server - Cannot resolve collation conflict for UNION operation'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-6099506651785480073</id><published>2011-01-11T14:47:00.002Z</published><updated>2011-01-11T14:55:10.540Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server - Take Offline - Database is in transition...</title><content type='html'>Tried to take a database offline by simply right-clicking on the database in SQL Management Studio and selecting 'Tasks &gt; Take Offline'&lt;br /&gt;&lt;br /&gt;The dialog box which was presented just hung for ages and afterwards when trying to access the database is was giving the error:&lt;br /&gt;&lt;br /&gt;Database 'myDatabase' is in transition. Try the statement later.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I would not have guessed it, but &lt;a href="http://social.msdn.microsoft.com/forums/en-US/sqlgetstarted/thread/e779230a-87bc-4cee-b223-98a029097dc1/"&gt;this post&lt;/a&gt; pointed me in the direction of restarting SQL Management Studio and everything was ok again!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-6099506651785480073?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/6099506651785480073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=6099506651785480073&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6099506651785480073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6099506651785480073'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/sql-server-take-offline-database-is-in.html' title='SQL Server - Take Offline - Database is in transition...'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-354692494299004263</id><published>2011-01-10T15:40:00.005Z</published><updated>2011-01-10T15:48:00.197Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Agile Reality over Rhetoric</title><content type='html'>I recently read &lt;a href="https://www.ibm.com/developerworks/mydeveloperworks/profiles/html/profileView.do?key=42940d9e-2ef0-4eea-8f64-25aaf7ad1cdb&amp;amp;lang=en"&gt;Scott Ambler's&lt;/a&gt; post on &lt;a href="https://www.ibm.com/developerworks/mydeveloperworks/blogs/ambler/entry/agile_reality_over_rhetoric7?lang=en"&gt;Agile Reality over Rhetoric&lt;/a&gt; and found the following three statements/techniques interesting and think it is fair to say I probably subscribe to them:&lt;div&gt;&lt;ol&gt;&lt;li&gt;Simple designs are best BUT the architecture should be thought out early in the lifecycle&lt;/li&gt;&lt;li&gt;Delivery teams don’t need prescriptive process definitions BUT they do need some high-level guidance to help organize their work&lt;/li&gt;&lt;li&gt;IT professionals know what to do BUT they’re still not process experts&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-354692494299004263?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/354692494299004263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=354692494299004263&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/354692494299004263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/354692494299004263'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/agile-reality-over-rhetoric.html' title='Agile Reality over Rhetoric'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1596559184345378685</id><published>2011-01-09T10:21:00.012Z</published><updated>2011-01-10T09:56:10.302Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server Full-Text Search</title><content type='html'>&lt;div&gt;Episode 61 of the DeepFriedBytes podcast recently introduced me to 2 new SQL Server concepts. The first one was SQL Server Full-Text Search which I'd heard of as we use it for some of our business applications, but I've personally never really been involved. The second one is SQL Server Service Broker, which I must admit to having never heard of, but from the use cases described in the podcast it looks like something worth exploring further.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SQL Server Full-Text Search allows you to:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"perform linguistic searches against text data in full-text indexes by operating on words and phrases based on rules of a particular language such as English or Japanese. Full-text queries can include simple words and phrases or multiple forms of a word or phrase"&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The basic steps to configure table columns in a database for full-text search are as follows:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Create a full-text catalog e.g.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;use mydatabase&lt;br /&gt;go&lt;br /&gt;EXEC sp_fulltext_database 'enable'&lt;br /&gt;go&lt;br /&gt;CREATE FULLTEXT CATALOG mycatalog&lt;br /&gt;go&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;2. On each table that you want to search, create a full-text index e.g.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;CREATE FULLTEXT INDEX ON mydatabase.dbo.mytable&lt;br /&gt;(&lt;br /&gt;column_to_index&lt;br /&gt;Language 0X0&lt;br /&gt;)&lt;br /&gt;KEY INDEX myindex ON mycatalog&lt;br /&gt;WITH CHANGE_TRACKING AUTO&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;i&gt;a.&lt;/i&gt;  Identify each text columns that you want to include in the full-text index.&lt;/div&gt;&lt;div&gt; &lt;i&gt;    b.&lt;/i&gt;  If a given column contains documents stored as binary data (varbinary, varbinary(max), or image data), you must specify a table column (the type column) that identifies the type of each document in the column being indexed.&lt;br /&gt;&lt;i&gt;    c.&lt;/i&gt;  Specify the language that you want full-text search to use on the documents in the column.&lt;br /&gt;&lt;i&gt;    d.&lt;/i&gt;  Choose the change-tracking mechanism that you want to use on the full-text index to track changes in the base table and its columns.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;3. After the columns have been added to a full-text index, applications and users can run full-text queries on the text in the columns. These queries can search for any of the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One or more specific words or phrases (simple term)&lt;/li&gt;&lt;li&gt;A word or a phrase where the words begin with specified text (prefix term)&lt;/li&gt;&lt;li&gt;Inflectional forms of a specific word (generation term)&lt;/li&gt;&lt;li&gt;A word or phrase close to another word or phrase (proximity term)&lt;/li&gt;&lt;li&gt;Synonymous forms of a specific word (thesaurus)&lt;/li&gt;&lt;li&gt;Words or phrases using weighted values (weighted term)&lt;/li&gt;&lt;/ul&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;SELECT    product_id&lt;br /&gt;FROM      products&lt;br /&gt;WHERE     CONTAINS(product_description, ”Snap Happy 100EZ”&lt;br /&gt;              OR FORMSOF(THESAURUS,’Snap Happy’)&lt;br /&gt;              OR ‘100EZ’)&lt;br /&gt;AND       product_cost&amp;lt;200&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;SELECT    candidate_name,SSN&lt;br /&gt;FROM      candidates&lt;br /&gt;WHERE     CONTAINS(candidate_resume,”SQL Server”)&lt;br /&gt;AND       candidate_division =DBA&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;And that's about it to get started...!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://twitter.com/#!/deepfriedbytes"&gt;DeepFriedBytes&lt;/a&gt; Podcast: &lt;a href="http://deepfriedbytes.com/podcast/episode-61-what-should-developers-know-about-sql-server/"&gt;Episode 61: What should Developers know about SQL Server?&lt;/a&gt;&lt;/div&gt;&lt;div&gt;See: &lt;a href="http://msdn.microsoft.com/en-us/library/ms142571.aspx"&gt;Full-Text Search on MSDN&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/3354578112415392473-1596559184345378685?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1596559184345378685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1596559184345378685&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1596559184345378685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1596559184345378685'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/sql-server-full-text-search.html' title='SQL Server Full-Text Search'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8900979814034227185</id><published>2011-01-07T13:40:00.002Z</published><updated>2011-01-07T13:47:18.377Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business'/><title type='text'>Orchid Wedding Hire</title><content type='html'>The new website for our wedding chair cover, table linen and centerpiece hire is now online at: &lt;a href="http://www.orchidweddinghire.co.uk/"&gt;www.orchidweddinghire.co.uk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Orchid Wedding Hire provide chair cover and table linen hire services throughout Cumbria and Southwest Scotland. We also have a range of vases and centrepieces available for venue decoration.&lt;br /&gt;&lt;br /&gt;If there is something you would like for your venue which is not listed on our site, please let us know. As our business continues to grow our product list will too. We aim to keep our prices competitive, however if you find our products locally at a lower price please let us know.&lt;br /&gt;&lt;br /&gt;At Orchid Wedding Hire we will work to ensure that your venue is not something only you will remember, but something your guests will remember too. &lt;br /&gt;&lt;br /&gt;Our services cover Cumbria and Southwest Scotland including Carlisle, Whitehaven, Workington, Penrith, Keswick, Brampton, Dumfries, Annan, Lockerbie, Moffat, Sanquhar, Langholm, Gretna and everywhere in between.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.orchidweddinghire.co.uk/"&gt;Weddings Carlisle&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.orchidweddinghire.co.uk/"&gt;Weddings Cumbria&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.orchidweddinghire.co.uk/"&gt;Weddings Southwest Scotland&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.orchidweddinghire.co.uk/"&gt;Chair Covers Carlisle&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.orchidweddinghire.co.uk/"&gt;Chair Covers Cumbria&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.orchidweddinghire.co.uk/"&gt;Chair Covers Southwest Scotland&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.orchidweddinghire.co.uk/"&gt;Table Linen Carlisle&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.orchidweddinghire.co.uk/"&gt;Table Linen Cumbria&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.orchidweddinghire.co.uk/"&gt;Table Linen Southwest Scotland&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8900979814034227185?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8900979814034227185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8900979814034227185&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8900979814034227185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8900979814034227185'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/orchid-wedding-hire.html' title='Orchid Wedding Hire'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8867675705454980537</id><published>2011-01-04T20:28:00.002Z</published><updated>2011-01-04T20:35:45.226Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='WCAT'/><category scheme='http://www.blogger.com/atom/ns#' term='Fiddler'/><title type='text'>WCAT Fiddler Extension</title><content type='html'>Discovered the &lt;a href="http://blogs.iis.net/thomad/archive/2010/05/11/using-the-wcat-fiddler-extension-for-web-server-performance-tests.aspx"&gt;WCAT Fiddler Extension&lt;/a&gt; today and already it's saved us shed loads of time by generating Scenario files from within Fiddler.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Simply install the extension from here, fire up Fiddler and start capturing your browser requests. Once you have captured the requests you require, select those sessions in Fiddler, right-click and click 'Run WCAT script for selected sessions'. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This will attempt to automatically run WCAT with the generated scenario file (however I could not get this bit to work?). The generated Scenario file is created in the %TEMP% directory with a *.wcat extension and can therefore be taken from there and used manually with the WCAT controller.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8867675705454980537?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8867675705454980537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8867675705454980537&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8867675705454980537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8867675705454980537'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/wcat-fiddler-extension.html' title='WCAT Fiddler Extension'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-382165912410241194</id><published>2011-01-04T13:08:00.003Z</published><updated>2011-01-04T13:11:29.257Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Access DB'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 7.5'/><title type='text'>Classic ASP and IIS7 Access Databases</title><content type='html'>Another of our Classic ASP applications was giving us a puzzling error trying to connect to an Access database through IIS7. This behaviour had only just being after migrating from IIS5 to IIS7.&lt;br /&gt;&lt;br /&gt;We eventually found the support article below and basically it was a permissions issue accessing the Windows\temp directory: &lt;a href="http://support.microsoft.com/kb/926939/"&gt;Error message when you request an ASP page that connects to an Access database in IIS 7.0: "Microsoft JET Database Engine error '80004005'"&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-382165912410241194?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/382165912410241194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=382165912410241194&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/382165912410241194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/382165912410241194'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/classic-asp-and-iis7-access-databases.html' title='Classic ASP and IIS7 Access Databases'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5944274254858878741</id><published>2011-01-04T10:27:00.004Z</published><updated>2011-01-04T10:35:47.276Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Classic ASP'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 7.5'/><title type='text'>Classic ASP and IIS7 Web Gardens</title><content type='html'>We have many small Classic ASP applications now running on IIS7.5 / Windows 2008 R2.&lt;br /&gt;&lt;br /&gt;Since we completed our migration from IIS5 we encountered some inconsistent behaviour around Classic ASP and Session State. It appeared that the session would intermittently be lost and then re-appear when re-submitting pages etc.&lt;br /&gt;&lt;br /&gt;We eventually discovered that this issue was being caused by the Application Pool being configured to function as a Web Garden i.e. Maximum Worker Processes was set to &gt; 1. When we reset the number of processes to 1 the Session State is now working as expected.&lt;br /&gt;&lt;br /&gt;The same must apply to IIS6 as per the article which pointed us towards the solution: &lt;a href="http://support.microsoft.com/?id=822171"&gt;IIS 6.0 Session State May Be Lost If You Use Web Gardens with ASP Applications&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5944274254858878741?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5944274254858878741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5944274254858878741&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5944274254858878741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5944274254858878741'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2011/01/classic-asp-and-iis7-web-gardens.html' title='Classic ASP and IIS7 Web Gardens'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1897943518712977590</id><published>2010-12-24T22:00:00.002Z</published><updated>2010-12-24T22:04:49.381Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS 5'/><title type='text'>IIS Redirect Variables</title><content type='html'>Not sure how I had not been aware of these before, but discovered the power of IIS Redirect Variables today whilst looking for a way to redirect requests, but include the query string.&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://support.microsoft.com/kb/313074"&gt;http://support.microsoft.com/kb/313074&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Use Redirect variables to either pass portions of the original URL with the destination URL or to prevent redirection of a specific file or folder. The following table lists the redirect variables that you can use in the Redirect to box and provides an example of each:&lt;br /&gt;&lt;br /&gt;The $S variable passes the matched suffix of the requested URL. The matched suffix is the portion of the original URL that remains after the redirected URL is substituted. The server automatically performs this suffix substitution. The $S variable is used only in combination with other variables. If /Scripts is redirected to /NewScripts and the original request is for /Scripts/Program.exe, the suffix is /Program.exe.&lt;br /&gt;&lt;br /&gt;The $P variable passes the parameters in the original URL without the question mark that is used to specify the beginning of the query string. If the original URL is /Scripts/MyScript.asp?number=1, the string "number=1" is mapped into the destination URL.&lt;br /&gt;&lt;br /&gt;The $Q variable passes the full query string (the question mark and the parameters) from the original URL. If the original URL is /Scripts/MyScript.asp?number=1, the string "?number=1" is mapped into the destination URL.&lt;br /&gt;&lt;br /&gt;The $V variable passes the requested URL, without the server name. If the original URL is /Myserver/Scripts/MyScript.asp, the string "/Scripts/MyScript.asp" is mapped into the destination URL.&lt;br /&gt;&lt;br /&gt;The variables $0 through $9 pass the portion of the requested URL that matches the indicated wildcard.&lt;br /&gt;&lt;br /&gt;! Do not redirect. Use this variable to prevent redirecting a folder or an individual file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1897943518712977590?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1897943518712977590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1897943518712977590&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1897943518712977590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1897943518712977590'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/12/iis-redirect-variables.html' title='IIS Redirect Variables'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4333682879418005681</id><published>2010-12-22T21:32:00.008Z</published><updated>2010-12-22T22:05:55.678Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Storytelling as a Leadership Tool</title><content type='html'>&lt;div&gt;"Analysis might excite the mind, but it hardly offers a route to the heart. And that's where we must go if we are to motivate people not only to take action but to do so with energy and enthusiasm."&lt;br /&gt;&lt;br /&gt;Points need to be made in seconds not minutes to allow listeners the mental space to relate the story to their own situtations, to ask themselves questions and to provide answers.&lt;br /&gt;&lt;br /&gt;Positive stories are often used to motivate people into action whereas negative stories help to share knowledge as people learn from mistakes. Stories which present solutions to technical problems are driven by a detailed explanation of the cause-and-effect relationship between an action and its consequence to relate why things happened as they did.&lt;br /&gt;&lt;br /&gt;Stories help leaders to define their personality for their followers, boosting others' confidence in the leaders' integrity and providing some idea of how they might act in a given situation. The ability to tell the right story at the right time id emerging as an essential leadership skill.&lt;br /&gt;&lt;br /&gt;A variety of narrative patterns are available for different aims:&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Sparking Action - a 'springboard' story enables listeners to visualise the transformation needed in their circumstances and then to act on that realisation&lt;/li&gt;&lt;li&gt;Communicating Who You Are - to trust you, people have to know you: who you are, where you've come from, and why you hold the views you do&lt;/li&gt;&lt;li&gt;Transmitting Values - a story to clearly establish limits on destructive behaviour ensures that the audience understands 'how things are done around here'&lt;/li&gt;&lt;li&gt;Fostering Collaboration - 'Encourage Conversations' by generating a common narative around a group's concerns and goals, beginning with a story told by one member of the group&lt;/li&gt;&lt;li&gt;Taming the Grapevine - harness the energy of the grapevine to defuse rumours by using a story to convince listeners that the gossip is either untrue or unreasonable&lt;/li&gt;&lt;li&gt;Sharing Knowledge - communicating intellectual capital across an organisation and beyond typically occurs informally through the sharing of stories&lt;/li&gt;&lt;li&gt;Leading People into the Future - a credible narrative can help take listeners from where they are now to where they need to be by making them comfortable with an image of the future&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Source: &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=3&amp;amp;sqi=2&amp;amp;ved=0CCUQFjAC&amp;amp;url=https%3A%2F%2Fengineering.purdue.edu%2FMECOM%2FAssignments%2FTelling-Tales-HBR.pdf&amp;amp;ei=wXUSTaXYHcaJhQfuho23Dg&amp;amp;usg=AFQjCNEYqwntN6MKgPM0u5SKaiWrZ6r9ag&amp;amp;sig2=JEnAhbUCfNkelERIcnuJHg"&gt;Telling Tales&lt;/a&gt; by &lt;a href="http://www.stevedenning.com"&gt;Steve Denning&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/3354578112415392473-4333682879418005681?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4333682879418005681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4333682879418005681&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4333682879418005681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4333682879418005681'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/12/storytelling-as-leadership-tool.html' title='Storytelling as a Leadership Tool'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-9198253144822886758</id><published>2010-12-21T16:46:00.002Z</published><updated>2010-12-21T16:50:09.357Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows 7 / Server 2008 - Where's ProxyCFG?</title><content type='html'>ProxyCfg.exe has been deprecated from Vista / Windows 2008 onwards and replaced with the NetSH command:&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;NetSH WinHTTP Set Proxy proxy-server="PROXY.COM:8080" bypass-list="SERVER.COM"&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;See: &lt;a href="http://technet.microsoft.com/en-us/library/bb430772.aspx"&gt;Configure Proxy Settings for WinHTTP&lt;/a&gt; and &lt;a href="http://wmug.co.uk/blogs/r0b/archive/2010/01/08/proxycfg-on-vista-and-win2008.aspx"&gt;ProxyCFG on Vista and Win2008&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-9198253144822886758?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/9198253144822886758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=9198253144822886758&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9198253144822886758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9198253144822886758'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/12/windows-7-server-2008-wheres-proxycfg.html' title='Windows 7 / Server 2008 - Where&apos;s ProxyCFG?'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-9078101547683326299</id><published>2010-11-27T19:37:00.006Z</published><updated>2010-11-27T20:39:53.313Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Authentication and Authorisation - OAuth, OpenID etc.</title><content type='html'>Thought I would look a little into some of the more recent (and not so recent) developments in application authentication and authorisation:&lt;br /&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/thumb/c/c8/OpenID_logo.svg/300px-OpenID_logo.svg.png" style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 300px; height: 113px;" border="0" alt="" /&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;OpenID &lt;/b&gt;- open standard that describes how users can be authenticated in a decentralized manner, obviating the need for services to provide their own ad hoc systems and allowing users to consolidate their digital identities. OpenID authentication is now used and provided by several large websites. Providers include AOL, BBC, Facebook, Google, IBM, MySpace, Orange, PayPal, VeriSign, LiveJournal, Yandex, Ustream and Yahoo!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/Oauth_logo.svg/180px-Oauth_logo.svg.png" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 180px; height: 181px;" border="0" alt="" /&gt;&lt;b&gt;OAuth&lt;/b&gt; - open standard for authorisation allows users to share their private resources (e.g. photos, videos, contact lists) stored on one site with another site without having to hand out their credentials. &lt;/span&gt;&lt;/span&gt;OAuth allows users to hand out tokens instead of credentials to their data hosted by a given service provider. Each token grants access to a specific site (e.g. a video editing site) for specific resources (e.g. just videos from a specific album) and for a defined duration (e.g. the next 2 hours). This allows a user to grant a third party site access to their information stored with another service provider, without sharing their access permissions or the full extent of their data.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Claims Based Authentication&lt;/b&gt; - the process of authenticating a user based on a set of claims about its identity contained in a trusted token. Such a token is often issued and signed by an entity that is able to authenticate the user by other means, and that is trusted by the entity doing the claims based authentication. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Active Directory Federation Services&lt;/b&gt; (ADFS) - a standards based Web Single Sign-On (SSO) service that enables federated identity by implementing claims based authentication across forests.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;SAML 2.0&lt;/b&gt; (Security Assertion Markup Language) - an XML-based standard for exchanging authentication and authorisation security tokens containing assertions between security domains.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-9078101547683326299?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/9078101547683326299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=9078101547683326299&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9078101547683326299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9078101547683326299'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/authentication-and-authorisation-oauth.html' title='Authentication and Authorisation - OAuth, OpenID etc.'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8325858656919481887</id><published>2010-11-27T09:02:00.044Z</published><updated>2011-02-11T20:22:40.324Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAN'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Centre'/><category scheme='http://www.blogger.com/atom/ns#' term='Networks'/><title type='text'>Data Centre Concepts - Servers, Storage Networks, Networking and Virtualisation</title><content type='html'>&lt;div&gt;With my background primarily in applications development I've been educating myself with terminology used in enterprise data centres over the past few months in order to demystify the language used by my IT Pro colleagues:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Servers&lt;/i&gt;&lt;/b&gt; &lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Blade &lt;/b&gt;- stripped down server to minimise space and energy usage&lt;/li&gt;&lt;li&gt;&lt;b&gt;Enclosure/Chassis &lt;/b&gt;- provides power, cooling, networking and management &lt;/li&gt;&lt;li&gt;&lt;b&gt;Rack Unit&lt;/b&gt; - 1U = 48cm x 4.45cm&lt;/li&gt;&lt;li&gt;&lt;b&gt;Half-Height Blade&lt;/b&gt; - 1/2 size of traditional blades&lt;/li&gt;&lt;li&gt;&lt;b&gt;p-Class Blade&lt;/b&gt; - HP ProLiant blade servers&lt;/li&gt;&lt;li&gt;&lt;b&gt;c-Class Blade&lt;/b&gt; - HP's next generation blades&lt;/li&gt;&lt;li&gt;&lt;b&gt;iLO (Integrated Lights-Out)&lt;/b&gt; - HP's out-of-band server management technology used to perform activities on a HP server e.g. to reset the server if the server doesn't respond anymore via the normal network card or power-up the server from a remote location even if the server is shut down. Physically connected via an Ethernet port on the iLO card&lt;/li&gt;&lt;li&gt;&lt;b&gt;IBM CEC (Central Electronics Component) p570&lt;/b&gt; - a module housing CPU's. RAM, PCI backplane etc. linked by scalability cables.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;Storage Networks&lt;/i&gt;&lt;/b&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;SAN (Storage Area Network)&lt;/b&gt; - storage device accessible to servers so the devices appear as locally attached to the O/S&lt;/li&gt;&lt;li&gt;&lt;b&gt;NAS (Network Attached Storage)&lt;/b&gt; - use NFS/SMB where it is clear that the storage is remote and computers request a portion of an abstract file rather than a disk block&lt;/li&gt;&lt;li&gt;&lt;b&gt;DAS (Direct Attached Storage)&lt;/b&gt; - directly attached to a server or workstation, without a storage network in between&lt;/li&gt;&lt;li&gt;&lt;b&gt;LUN (Logical Unit Number)&lt;/b&gt; - a logical disk as created on a SAN&lt;/li&gt;&lt;li&gt;&lt;b&gt;NFS (Network File System)&lt;/b&gt; - a protocol primarily used in Unix/Linux allowing a user on a client computer to access files over a network in a manner similar to how local storage is accessed&lt;/li&gt;&lt;li&gt;&lt;b&gt;SMB/CIFS (Server Message Block / Common Internet File System)&lt;/b&gt; - a protocol primarily used in Windows to provide shared access to files, printers, serial ports, and miscellaneous communications between nodes on a network&lt;/li&gt;&lt;li&gt;&lt;b&gt;FC (Fibre Channel)&lt;/b&gt; - a gigabit-speed network technology that has become the standard connection type for SAN &lt;/li&gt;&lt;li&gt;&lt;b&gt;Switched Fabric&lt;/b&gt; - nodes connected to each other via one or more network switches offering better total throughput than broadcast networks because traffic is spread across multiple physical links&lt;/li&gt;&lt;li&gt;&lt;b&gt;Fibre Channel Switch&lt;/b&gt; - a network switch compatible with the FC protocol allowing for the creation of a Fibre Channel fabric&lt;/li&gt;&lt;li&gt;&lt;b&gt;FC-SW (Fibre Channel Switched Fabric)&lt;/b&gt; - devices connected to each other through one or more Fibre Channel switches. Usually in a mesh network with devices on the edges/leaves of the mesh. Two separate fabrics can be employed to provide failover capability for redundancy&lt;/li&gt;&lt;li&gt;&lt;b&gt;Fibre Channel Zoning&lt;/b&gt; - the partitioning of a FC fabric into smaller subsets to restrict interference, add security, and to simplify management. While a SAN makes available several LUNs, each system connected to the SAN should only be allowed access to a controlled subset of the LUNs&lt;/li&gt;&lt;li&gt;&lt;b&gt;RSCN (Registered State Change Notification)&lt;/b&gt; - a FC fabric's notification sent to all specified nodes in case of any major fabric changes. This allows nodes to immediately gain knowledge about the fabric and react accordingly&lt;/li&gt;&lt;li&gt;&lt;b&gt;LUN Masking&lt;/b&gt; - an authorization process that makes a LUN available to some hosts and unavailable to other hosts&lt;/li&gt;&lt;li&gt;&lt;b&gt;FCP (Fibre Channel Protocol)&lt;/b&gt; - a transport protocol which predominantly transports SCSI commands over FC networks&lt;/li&gt;&lt;li&gt;&lt;b&gt;iSCSI (SCSI over TCP/IP)&lt;/b&gt; - an IP based storage networking standard for linking data storage facilities. Unlike traditional FC, which requires special-purpose cabling, iSCSI can be run over long distances using existing network infrastructure&lt;/li&gt;&lt;li&gt;&lt;b&gt;SPI (Parallel SCSI)&lt;/b&gt; - a parallel SCSI bus technology&lt;/li&gt;&lt;li&gt;&lt;b&gt;SAS (Serial Attached SCSI)&lt;/b&gt; - a point-to-point serial protocol that replaces SPI&lt;/li&gt;&lt;li&gt;&lt;b&gt;PATA (Parallel Advanced Technology Attachment)&lt;/b&gt; - bus interface for connecting adapters to storage devices&lt;/li&gt;&lt;li&gt;&lt;b&gt;SATA (Serial ATA)&lt;/b&gt; - replaced PATA with serial cable reducing cable bulk with faster data transfer and hot-swapping. eSATA provides external connectivity&lt;/li&gt;&lt;li&gt;&lt;b&gt;FATA&lt;/b&gt; - low cost SATA disk equipped with converter that changes the interface to FC to allow it to be used in an enterprise class disk enclosure&lt;/li&gt;&lt;li&gt;&lt;b&gt;FC Disk&lt;/b&gt; - native FC disk providing greater IOPS (FC 15,000 rpm drive is likely to deliver IOPS around 4.5 times greater than a FATA 7,200 drive)&lt;/li&gt;&lt;li&gt;&lt;b&gt;IOPS (Input/Output Operations Per Second)&lt;/b&gt; - common benchmark for hard disks. Comparative measurements include Total IOPS, Random Read IOPS, Random Write IOPS, Sequential Read IOPS, Sequential Write IOPS &lt;/li&gt;&lt;li&gt;&lt;b&gt;Disk Latency&lt;/b&gt; - the delay between receiving the instruction and retrieving the data. Determined by a sum of the spin-up time, seek time, rotational delay, and transfer time&lt;/li&gt;&lt;li&gt;&lt;b&gt;RAID (Redundant Array of Independent Disks) &lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;- provides increased storage functions and reliability through redundancy achieved by combining multiple disks into a logical unit, where data is distributed across the drives in one of several ways called "RAID levels"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;EVA (Enterprise Virtual Array)&lt;/b&gt; - HP's virtualised storage architecture offering&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;F&lt;/span&gt;CoE (FC over Ethernet)&lt;/b&gt; - an encapsulation of FC frames over Ethernet allowing FC to use 10 Gigabit Ethernet (or higher speeds)&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="WHITE-SPACE: pre" class="Apple-tab-span"&gt;H&lt;/span&gt;BA (Host Bus Adapter)&lt;/b&gt; - connects a host system to other network and storage devices. Each HBA has a unique WWN&lt;/li&gt;&lt;li&gt;&lt;b&gt;SRM (Storage Resource Management)&lt;/b&gt; - process of optimising the efficiency and speed with which the available drive space is utilised in a SAN. SRM identifies underutilised capacity, identifies old or non-critical data that could be moved to less-expensive storage, and helps predict future capacity requirements&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;Networking&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Ethernet&lt;/b&gt; - a family of frame-based networking technologies for LANs. Defines wiring and signaling standards for the OSI Physical Layer and a common addressing format and Media Access Control at the Data Link Layer&lt;/li&gt;&lt;li&gt;&lt;b&gt;Subnet&lt;/b&gt; - a logically visible subdivision of an IP network&lt;/li&gt;&lt;li&gt;&lt;b&gt;VLAN (Virtual LAN)&lt;/b&gt; - a group of hosts that communicate as if they were attached to the same broadcast domain regardless of their physical location&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ring Topology&lt;/b&gt; - a topology in which each node connects to exactly two other nodes forming a single continuous pathway&lt;/li&gt;&lt;li&gt;&lt;b&gt;Mesh Network&lt;/b&gt; - a topology in which each node may act as an independent router allowing for continuous connections and reconfiguration around broken or blocked paths&lt;/li&gt;&lt;li&gt;&lt;b&gt;Upstream Server&lt;/b&gt; - a server that provides service to another server&lt;/li&gt;&lt;li&gt;&lt;b&gt;STP (Spanning Tree Protocol)&lt;/b&gt; - ensures a loop-free topology for any bridged Ethernet LAN allowing a network to include redundant links to provide automatic backup paths if an active link fails, without the danger of bridge loops, or the need for manual enabling/disabling&lt;/li&gt;&lt;li&gt;&lt;b&gt;Trunking / Link Aggregation&lt;/b&gt; - Cisco uses the term "trunking" to mean "VLAN multiplexing" - carrying multiple VLANs through a single network link through the use of a "trunking protocol". To allow for multiple VLANs on one link, frames from individual VLANs must be identified&lt;/li&gt;&lt;li&gt;&lt;b&gt;DTP (Dynamic Trunking Protocol)&lt;/b&gt; - Cisco proprietary protocol to negotiate trunking on a link between two VLAN-aware switches and the type of trunking encapsulation to be used&lt;/li&gt;&lt;li&gt;&lt;b&gt;VLAN Trunking Protocol (VTP)&lt;/b&gt; - Cisco proprietary protocol to manage VLAN crud changes across network. VLAN changes on VTP server distributed through all switches in domain. Equivalent to IEEE GVRP/MVRP.&lt;/li&gt;&lt;li&gt;&lt;b&gt;TCP Wrappers&lt;/b&gt; - a host-based Networking ACL system used to filter network access to Internet Protocol servers on Unix-like operating systems&lt;/li&gt;&lt;li&gt;&lt;b&gt;Catalyst 6500 Switch&lt;/b&gt; - a modular network switch manufactured by Cisco comprising of a chassis, power supplies, one or two supervisors, line cards and service modules&lt;/li&gt;&lt;li&gt;&lt;b&gt;WWN (World Wide Name)&lt;/b&gt; - a unique 8 byte number which identifies a particular FC, ATA or SAS target&lt;/li&gt;&lt;li&gt;&lt;b&gt;MAC (Media Access Control) Address&lt;/b&gt; - a unique identifier assigned to network interfaces for communications on the physical network segment&lt;/li&gt;&lt;li&gt;&lt;b&gt;ARP (Address Resolution Protocol)&lt;/b&gt; - protocol frequently used to translate IPv4 addresses into MAC addresses &lt;/li&gt;&lt;li&gt;&lt;b&gt;POP (Point of Presence)&lt;/b&gt; -a physical access point to the Internet that houses servers, routers, ATM switches and digital/analog call aggregators &lt;/li&gt;&lt;li&gt;&lt;b&gt;SNMP (Simple Network Management Protocol)&lt;/b&gt; - a protocol for monitoring and managing routers, switches, servers etc. on IP networks by exposing variables describing the system configuration&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;Virtualisation&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;VMWare ESX / Hyper-V&lt;/b&gt; - enterprise-level virtualisation hypervisors&lt;/li&gt;&lt;li&gt;&lt;b&gt;VHD / VMDK&lt;/b&gt; - virtual hard disk file formats&lt;/li&gt;&lt;li&gt;&lt;b&gt;AMD-V / VT-x&lt;/b&gt; - x86 processor extensions offering hardware support for virtualisation&lt;/li&gt;&lt;li&gt;&lt;b&gt;Memory Ballooning&lt;/b&gt; - a process by which the host of a VM influences the memory management of the VM's operating system&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;b&gt;VMWare &lt;/b&gt;&lt;/span&gt;VMotion&lt;span class="Apple-style-span" style="font-weight: normal; "&gt; - the capability to move a running VM from one ESX host to another&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;b&gt;VMWare &lt;/b&gt;&lt;/span&gt;DRS (Dynamic Resource Scheduler)&lt;/b&gt; - automatic load balancing of a ESX cluster using VMotion&lt;/li&gt;&lt;li&gt;&lt;b&gt;VMWare HA (High Availability)&lt;/b&gt; - in case of hardware failure in a cluster VM's automatically restart on another host in the cluster&lt;/li&gt;&lt;li&gt;&lt;b&gt;VMWare VSphere&lt;/b&gt; - cloud operating system able to manage large pools of virtualized infrastructure&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8325858656919481887?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8325858656919481887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8325858656919481887&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8325858656919481887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8325858656919481887'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/data-centre-concepts-servers-storage.html' title='Data Centre Concepts - Servers, Storage Networks, Networking and Virtualisation'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-2175941183195936075</id><published>2010-11-26T11:03:00.002Z</published><updated>2010-11-26T11:06:11.267Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title type='text'>REST and Resource Programming Model Concepts</title><content type='html'>Some quick definitions of REST and Resource Programming Model terms:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Resource - an entity accessiblie through HTTP&lt;/li&gt;&lt;li&gt;URI - used to address resources&lt;/li&gt;&lt;li&gt;HTTP Methods - used to read/update resources&lt;/li&gt;&lt;li&gt;Item Resource - an individual resource&lt;/li&gt;&lt;li&gt;Collection Resource - a collection of resources&lt;/li&gt;&lt;li&gt;Representation - snapshot of resource presented in a specific Media Type&lt;/li&gt;&lt;li&gt;Media Type - stored in 'Content-Type' header of request or response&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Source: &lt;a href="http://codebetter.com/blogs/glenn.block/archive/2010/11/15/exploring-resources-a-resource-programming-model-and-code-based-configuration.aspx"&gt;Exploring resources, a resource programming model, and code-based configuration&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-2175941183195936075?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/2175941183195936075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=2175941183195936075&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2175941183195936075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2175941183195936075'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/rest-and-resource-programming-model.html' title='REST and Resource Programming Model Concepts'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1375458801023137923</id><published>2010-11-26T10:34:00.003Z</published><updated>2010-11-26T10:53:51.331Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Project Toolkit'/><title type='text'>Project Management Snippets</title><content type='html'>I've been following the &lt;a href="http://www.theregister.co.uk/Tag/project%20management"&gt;recent Project Management series on the Register&lt;/a&gt; and pulled out a few snippets to act as a refresher of good practices:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Reasons for Budget Overruns &lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Software versions not specified or incompatible&lt;/li&gt;&lt;li&gt;Negligence of service level issues e.g. resilience, disaster recovery, business continuity&lt;/li&gt;&lt;li&gt;Lack of time for sufficient testing&lt;/li&gt;&lt;li&gt;Attempts to retrofit security and access restrictions&lt;/li&gt;&lt;li&gt;Lack of firm control over scope creep - authority and accountability required&lt;/li&gt;&lt;li&gt;Insufficient built-in contingency&lt;/li&gt;&lt;li&gt;Lack of regular checkpoints and/or failure to spot early warning signs&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;When Projects Go Right&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Everyone working from the same page with a clear vision&lt;/li&gt;&lt;li&gt;Setting of expectations that are challengeable yet achieveable&lt;/li&gt;&lt;li&gt;Infrastructure and software dependencies taken into account&lt;/li&gt;&lt;li&gt;Support and commitment from business especially senior management&lt;/li&gt;&lt;li&gt;Consideration of security, training and support, mobile working, regulatory issues, data storage&lt;/li&gt;&lt;li&gt;Availability of sufficient resources and skills with flexibility to deal with overcommittment of individuals&lt;/li&gt;&lt;li&gt;Balance internal politics and sensitivities&lt;/li&gt;&lt;li&gt;Clear lines of reporting upwards&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;How not to Project Manage&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Assuming they know what you do - need to make your contributions clear&lt;/li&gt;&lt;li&gt;Assuming judged on past success - need to have had failures in order to learn&lt;/li&gt;&lt;li&gt;Assuming estimates are correct - need to research past costs and timings&lt;/li&gt;&lt;li&gt;Assuming you must always be right - do not need to the know-all guru&lt;/li&gt;&lt;li&gt;Assuming planning is a shared responsibility - planning, planning, planning!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Project Communications&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Define the audience(s), appropriate levels of info and frequency&lt;/li&gt;&lt;li&gt;Define how the comms plan will be measured and reviewed&lt;/li&gt;&lt;li&gt;Time comms to co-incide with project checkpoints/milestones&lt;/li&gt;&lt;li&gt;Consider variety of comms methods depending upon cost, immediacy, privacy and accessibility&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1375458801023137923?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1375458801023137923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1375458801023137923&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1375458801023137923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1375458801023137923'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/project-management-snippets.html' title='Project Management Snippets'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7195971232539801646</id><published>2010-11-26T10:07:00.002Z</published><updated>2011-02-03T12:22:16.341Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Design'/><title type='text'>Google Font API</title><content type='html'>Just discovered the Google Font API - can't believe I've been wasting all that time (and bandwidth) creating images for non-standard browser fonts:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;br /&gt; &amp;lt;head&amp;gt;&lt;br /&gt;   &amp;lt;link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Tangerine|Inconsolata|Droid+Sans"&amp;gt;&lt;br /&gt;   &amp;lt;style&amp;gt;&lt;br /&gt;       body {&lt;br /&gt;         font-family: 'Tangerine', serif;&lt;br /&gt;         font-size: 48px;&lt;br /&gt;         text-shadow: 4px 4px 4px #aaa;&lt;br /&gt;       }&lt;br /&gt;   &amp;lt;/style&amp;gt;&lt;br /&gt; &amp;lt;/head&amp;gt;&lt;br /&gt; &amp;lt;body&amp;gt;&lt;br /&gt;   &amp;lt;h1&amp;gt;Making the Web Beautiful!&amp;lt;/h1&amp;gt;&lt;br /&gt; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;See: &lt;a href="http://code.google.com/apis/webfonts/docs/getting_started.html#Quick_Start"&gt;http://code.google.com/apis/webfonts/docs/getting_started.html#Quick_Start&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-7195971232539801646?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7195971232539801646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7195971232539801646&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7195971232539801646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7195971232539801646'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/google-font-api.html' title='Google Font API'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5529124849671438479</id><published>2010-11-24T16:00:00.002Z</published><updated>2010-11-24T16:03:08.998Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server - Try, Catch and Throw Exception</title><content type='html'>Wasn't sure until now how to re-throw a caught error in SQL Server - turns out it's relatively straightforward using RAISERROR:&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;BEGIN TRY&lt;br /&gt;    -- RAISERROR with severity 11-19 will cause execution to&lt;br /&gt;    -- jump to the CATCH block.&lt;br /&gt;    RAISERROR ('Error raised in TRY block.', -- Message text.&lt;br /&gt;               16, -- Severity.&lt;br /&gt;               1 -- State.&lt;br /&gt;               );&lt;br /&gt;END TRY&lt;br /&gt;BEGIN CATCH&lt;br /&gt;    DECLARE @ErrorMessage NVARCHAR(4000);&lt;br /&gt;    DECLARE @ErrorSeverity INT;&lt;br /&gt;    DECLARE @ErrorState INT;&lt;br /&gt;&lt;br /&gt;    SELECT&lt;br /&gt;        @ErrorMessage = ERROR_MESSAGE(),&lt;br /&gt;        @ErrorSeverity = ERROR_SEVERITY(),&lt;br /&gt;        @ErrorState = ERROR_STATE();&lt;br /&gt;&lt;br /&gt;    -- Use RAISERROR inside the CATCH block to return error&lt;br /&gt;    -- information about the original error that caused&lt;br /&gt;    -- execution to jump to the CATCH block.&lt;br /&gt;    RAISERROR (@ErrorMessage, -- Message text.&lt;br /&gt;               @ErrorSeverity, -- Severity.&lt;br /&gt;               @ErrorState -- State.&lt;br /&gt;               );&lt;br /&gt;END CATCH;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Source: &lt;a href="http://msdn.microsoft.com/en-us/library/ms178592.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms178592.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5529124849671438479?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5529124849671438479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5529124849671438479&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5529124849671438479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5529124849671438479'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/sql-server-try-catch-and-throw.html' title='SQL Server - Try, Catch and Throw Exception'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4055627978279064590</id><published>2010-11-18T16:42:00.003Z</published><updated>2010-11-23T11:31:57.725Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Deploy'/><title type='text'>Sync Web Servers with Web Deploy</title><content type='html'>&lt;span style="font-family:courier new;"&gt;"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:webserver,computername=server1 -dest:auto,computername=server2 -skip:objectName=dirPath,absolutePath=catalog\.wci &gt; webdeploysync.log&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Making use of the above command to sync the web server content and configuration in our farm (whilst ignoring the Indexing Service files which are locked)&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/em&gt;: Now using a batch file with the following contents triggered via a Scheduled Task every 5 minutes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ECHO Starting at %DATE% %TIME% &gt;&gt; E:\WebDeploy\Sync.log&lt;br /&gt;ECHO. &gt;&gt; E:\WebDeploy\Sync.log&lt;br /&gt;ECHO Calling "msdeploy.exe -verb:sync -source:webserver,computername=server1 -dest:auto,computername=server2 -skip:objectName=dirPath,absolutePath=catalog\.wci" &gt;&gt; E:\WebDeploy\Sync.log ECHO. &gt;&gt; E:\WebDeploy\Sync.log&lt;br /&gt;CALL "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:webserver,computername=server1 -dest:auto,computername=server2 -skip:objectName=dirPath,absolutePath=catalog\.wci -skip:objectName=filePath,absolutePath=\.log -skip:objectName=filePath,absolutePath=\.svclog &gt;&gt; E:\WebDeploy\Sync.log 2&gt;&amp;amp;1&lt;br /&gt;ECHO. &gt;&gt; E:\WebDeploy\Sync.log&lt;br /&gt;ECHO Finishing at %DATE% %TIME% &gt;&gt; E:\WebDeploy\Sync.log&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-4055627978279064590?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4055627978279064590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4055627978279064590&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4055627978279064590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4055627978279064590'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/sync-web-servers-with-web-deploy.html' title='Sync Web Servers with Web Deploy'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5111686290491918248</id><published>2010-11-15T11:59:00.000Z</published><updated>2010-11-15T12:01:55.456Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='DCOM'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Find Friendly Program Name for DCOM Config</title><content type='html'>&lt;p&gt;In RegEdit do a find (Ctrl-F) for the CLSID e.g. {0C0A3666-30C9-11D0-8F20-00805F2CD064} . The CLSID should be within the folder with the friendly application name.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5111686290491918248?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5111686290491918248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5111686290491918248&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5111686290491918248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5111686290491918248'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/find-friendly-program-name-for-dcom.html' title='Find Friendly Program Name for DCOM Config'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7267279350503823368</id><published>2010-11-14T21:27:00.001Z</published><updated>2010-11-14T21:29:03.849Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Formatting Dates, Times and Numbers in .NET</title><content type='html'>Article providing a great overview of the formatting functionality in .NET:&lt;div&gt;&lt;br /&gt;&lt;a href="http://www.4guysfromrolla.com/articles/111010-1.aspx"&gt;http://www.4guysfromrolla.com/articles/111010-1.aspx&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/3354578112415392473-7267279350503823368?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7267279350503823368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7267279350503823368&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7267279350503823368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7267279350503823368'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/formatting-dates-times-and-numbers-in.html' title='Formatting Dates, Times and Numbers in .NET'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-6611680454794859635</id><published>2010-11-09T14:01:00.001Z</published><updated>2010-11-09T14:03:20.776Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows XP / Server 2003 Search Within Files Issues</title><content type='html'>Search for 'a word of phrase in the file' ignoring some of your files?&lt;br /&gt;&lt;br /&gt;Check that the file types you want to search have the following registry key:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;HKEY_CLASSES_ROOT\.zzz\PersistentHandler\(Default) = {5e941d80-bf96-11cd-b579-08002b30bfeb}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;More details here: &lt;a href="http://support.microsoft.com/kb/309173"&gt;Using the "A word or phrase in the file" search criterion may not work&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-6611680454794859635?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/6611680454794859635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=6611680454794859635&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6611680454794859635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6611680454794859635'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/windows-xp-server-2003-search-within.html' title='Windows XP / Server 2003 Search Within Files Issues'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-6628359726221590107</id><published>2010-11-09T10:21:00.002Z</published><updated>2010-11-09T10:23:33.638Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows 7 / Server 2008 Shortcuts</title><content type='html'>Some handy keyboard shortcuts here: &lt;a href="http://www.courtneyelizabeth.com/2010/10/03/windows-7-shortcuts/"&gt;http://www.courtneyelizabeth.com/2010/10/03/windows-7-shortcuts/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Think I agree that the New Folder shortcut is my favourite. Also like the Taskbar shortcuts - they will probably get me to make more use of the new Taskbar functionality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-6628359726221590107?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/6628359726221590107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=6628359726221590107&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6628359726221590107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6628359726221590107'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/windows-7-server-2008-shortcuts.html' title='Windows 7 / Server 2008 Shortcuts'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7399421051606422392</id><published>2010-11-06T10:29:00.001Z</published><updated>2010-11-14T21:26:55.354Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Car'/><title type='text'>Corsa Wheel Speed Sensor</title><content type='html'>&lt;div&gt;Speedo was not working when travelling at &lt;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YHz61vBBh7E/TNUyiPRIt9I/AAAAAAAADJA/1VQGBeY9qz4/s1600/corsa+speed+sensor.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_YHz61vBBh7E/TNUyiPRIt9I/AAAAAAAADJA/1VQGBeY9qz4/s400/corsa+speed+sensor.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5536386880717240274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;http://www.corsa-c.co.uk/forum/showthread.php?100692-Speed-sensor-broken-no-spedo-etc.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-7399421051606422392?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7399421051606422392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7399421051606422392&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7399421051606422392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7399421051606422392'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/corsa-wheel-speed-sensor.html' title='Corsa Wheel Speed Sensor'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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/_YHz61vBBh7E/TNUyiPRIt9I/AAAAAAAADJA/1VQGBeY9qz4/s72-c/corsa+speed+sensor.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7622536959319864571</id><published>2010-11-05T19:17:00.003Z</published><updated>2010-11-05T19:21:48.073Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Install Windows 7 from USB Drive</title><content type='html'>Just used the guide here to re-install Windows 7 from a USB drive onto a goosed netbook without a CD/DVD drive:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.intowindows.com/how-to-install-windows-7vista-from-usb-drive-detailed-100-working-guide/"&gt;http://www.intowindows.com/how-to-install-windows-7vista-from-usb-drive-detailed-100-working-guide/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-7622536959319864571?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7622536959319864571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7622536959319864571&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7622536959319864571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7622536959319864571'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/install-windows-7-from-usb-drive.html' title='Install Windows 7 from USB Drive'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-70025989645776958</id><published>2010-11-03T15:55:00.002Z</published><updated>2010-11-03T15:59:48.517Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF Support for jQuery</title><content type='html'>Support for 'jQuery-friendly' WCF services has now been added to Visual Studio 2010 via CodePlex: &lt;a href="http://tomasz.janczuk.org/2010/10/wcf-support-for-jquery-on.html"&gt;http://tomasz.janczuk.org/2010/10/wcf-support-for-jquery-on.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-70025989645776958?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/70025989645776958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=70025989645776958&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/70025989645776958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/70025989645776958'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/wcf-support-for-jquery.html' title='WCF Support for jQuery'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5264906324341777090</id><published>2010-11-03T14:53:00.001Z</published><updated>2010-11-03T14:54:31.258Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><title type='text'>Restart-Service Cmdlet</title><content type='html'>Looking to automate the restart of a Windows service? The Restart-Service Cmdlet couldn't be any simpler!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Restart-Service btwdins&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ee176942.aspx"&gt;http://technet.microsoft.com/en-us/library/ee176942.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5264906324341777090?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5264906324341777090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5264906324341777090&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5264906324341777090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5264906324341777090'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/restart-service-cmdlet.html' title='Restart-Service Cmdlet'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4107978455968646291</id><published>2010-11-01T16:29:00.002Z</published><updated>2010-11-01T16:32:58.884Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF Message Logging Configuration</title><content type='html'>How to configure Message Logging in WCF:&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;&amp;lt;system.diagnostics&amp;gt;&lt;br /&gt;  &amp;lt;sources&amp;gt;&lt;br /&gt;      &amp;lt;source name="System.ServiceModel.MessageLogging"&amp;gt;&lt;br /&gt;        &amp;lt;listeners&amp;gt;&lt;br /&gt;                 &amp;lt;add name="messages"&lt;br /&gt;                 type="System.Diagnostics.XmlWriterTraceListener"&lt;br /&gt;                 initializeData="c:\logs\messages.svclog" /&amp;gt;&lt;br /&gt;          &amp;lt;/listeners&amp;gt;&lt;br /&gt;      &amp;lt;/source&amp;gt;&lt;br /&gt;    &amp;lt;/sources&amp;gt;&lt;br /&gt;&amp;lt;/system.diagnostics&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;system.serviceModel&amp;gt;&lt;br /&gt;  &amp;lt;diagnostics&amp;gt;&lt;br /&gt;    &amp;lt;messageLogging&lt;br /&gt;         logEntireMessage="true"&lt;br /&gt;         logMalformedMessages="false"&lt;br /&gt;         logMessagesAtServiceLevel="true"&lt;br /&gt;         logMessagesAtTransportLevel="false"&lt;br /&gt;         maxMessagesToLog="3000"&lt;br /&gt;         maxSizeOfMessageToLog="2000"/&amp;gt;&lt;br /&gt;  &amp;lt;/diagnostics&amp;gt;&lt;br /&gt;&amp;lt;/system.serviceModel&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;See: &lt;a href="http://msdn.microsoft.com/en-us/library/ms730064.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms730064.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-4107978455968646291?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4107978455968646291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4107978455968646291&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4107978455968646291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4107978455968646291'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/wcf-message-logging-configuration.html' title='WCF Message Logging Configuration'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8149008653647651655</id><published>2010-11-01T16:10:00.002Z</published><updated>2010-11-01T16:17:07.323Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF Timeouts Explained</title><content type='html'>&lt;p&gt;An explanation of where and why to use the WCF Timeout configurations:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Client side&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;SendTimeout is used to initialize the OperationTimeout, which governs the whole interaction for sending a message (including receiving a reply message in a request-reply case). This timeout also applies when sending reply messages from a CallbackContract method.&lt;/li&gt;&lt;li&gt;OpenTimeout and CloseTimeout are used when opening and closing channels (when no explicit timeout value is passed). &lt;/li&gt;&lt;li&gt;ReceiveTimeout is not used. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Server side&lt;/strong&gt;: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Send, Open, and Close Timeout same as on client (for Callbacks).&lt;/li&gt;&lt;li&gt;ReceiveTimeout is used by ServiceFramework layer to initialize the session-idle timeout.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/"&gt;http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/&lt;/a&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8149008653647651655?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8149008653647651655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8149008653647651655&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8149008653647651655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8149008653647651655'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/11/wcf-timeouts-explained.html' title='WCF Timeouts Explained'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8535538302674632022</id><published>2010-10-26T09:18:00.004+01:00</published><updated>2011-02-16T10:52:56.254Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 7.5'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 5'/><title type='text'>SelfSSL for IIS</title><content type='html'>Install the 'IIS6 Resource Kit' from here: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-ade629c89499&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-ade629c89499&amp;amp;DisplayLang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note&lt;/strong&gt;: &lt;em&gt;Although this is the ISS6 Resource Kit it also works for IIS 5. Just copy the selfssl.exe to your Windows 2000 server.&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;Log into the server that requires the certificate renewal with local administrator rights:&lt;br /&gt;&lt;br /&gt;1. Go to ‘Start’ – ‘Programs’ – ‘IIS Resources’ – ‘SelfSSL’ choose ‘SelfSSL’&lt;br /&gt;2. Type in ‘selfssl.exe /N:CN=&lt;servername&gt;/K:1024 /V:1095 /S:1 /P:443 /T’ with the correct server name for example: ‘selfssl.exe /N:CN=SERVERABC123 /K:1024 /V:1095 /S:1 /P:443 /T’&lt;br /&gt;3. Select ‘Enter’&lt;br /&gt;4. When you receive the message ‘Do you want to replace the SSL settings for site 1 (Y/N)?’ pres ‘Y’&lt;br /&gt;5. You should receive the message ‘The self signed certificate was successfully assigned to site 1.’&lt;/servername&gt;&lt;div&gt;&lt;servername&gt;&lt;br /&gt;&lt;/servername&gt;&lt;/div&gt;&lt;div&gt;&lt;servername&gt;For IIS7 see ScottGu's tutorial here: &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/04/06/tip-trick-enabling-ssl-on-iis7-using-self-signed-certificates.aspx"&gt;Enabling SSL on IIS 7.0 Using Self-Signed Certificates&lt;/a&gt;&lt;/servername&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8535538302674632022?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8535538302674632022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8535538302674632022&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8535538302674632022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8535538302674632022'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/10/selfssl-for-iis.html' title='SelfSSL for IIS'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-9019143248191500824</id><published>2010-10-20T14:12:00.002+01:00</published><updated>2010-10-20T14:23:16.265+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Design'/><title type='text'>Hide Email Address on Websites from Spam</title><content type='html'>&lt;p&gt;Nice compilation of methods to help protect your email addresses from spam spiders: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Replace the AT (@) and DOT (.) symbols &lt;/li&gt;&lt;li&gt;Mask your email with tags, append meaningful words e.g. &lt;a href="mailto:me@gmail.com.nospam"&gt;me@gmail.com.nospam&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Replace text with an image &lt;/li&gt;&lt;li&gt;Email Obfuscators &lt;/li&gt;&lt;li&gt;Encode with special HTML characters: &lt;a href="http://getyourwebsitehere.com/jswb/text_to_ascii.html"&gt;http://getyourwebsitehere.com/jswb/text_to_ascii.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Hide email using CSS trick (direction property) &lt;/li&gt;&lt;li&gt;Hide your email address with JavaScript &lt;/li&gt;&lt;li&gt;Enkoder Javscript Form&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Source: &lt;a href="http://labnol.blogspot.com/2006/03/hide-your-email-address-on-websites.html"&gt;http://labnol.blogspot.com/2006/03/hide-your-email-address-on-websites.html&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-9019143248191500824?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/9019143248191500824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=9019143248191500824&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9019143248191500824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9019143248191500824'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/10/hide-email-address-on-websites-from.html' title='Hide Email Address on Websites from Spam'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5654655197673330498</id><published>2010-10-20T09:46:00.001+01:00</published><updated>2010-10-20T09:48:43.828+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>TortoiseSVN - Update Item to Revision vs Revert to Revision</title><content type='html'>I now understand the difference between the above options thanks to SO: &lt;a href="http://stackoverflow.com/questions/1214939/update-item-to-revision-vs-revert-to-revision"&gt;http://stackoverflow.com/questions/1214939/update-item-to-revision-vs-revert-to-revision&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Update to revision&lt;/strong&gt; will only update files of your workingcopy to your choosen revision. But you cannot continue to work on this revision, as SVN will complain that your workingcopy is out of date.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Revert&lt;/strong&gt; will undo all changes in your working copy which were made after the selected revision (in your example rev. 96,97,98,99,100) Your working copy is now in modified state.&lt;br /&gt;&lt;br /&gt;The file content of both scenarions is same, however in first case you have an unmodified working copy and you cannot commit your changes(as your workingcopy is not pointing to HEAD rev 100) in second case you have a modified working copy pointing to head and you can continue to work and commit &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Hopefully this one will not catch me out again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5654655197673330498?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5654655197673330498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5654655197673330498&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5654655197673330498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5654655197673330498'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/10/tortoisesvn-update-item-to-revision-vs.html' title='TortoiseSVN - Update Item to Revision vs Revert to Revision'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-848656443603298732</id><published>2010-10-01T20:46:00.010+01:00</published><updated>2010-10-03T12:15:40.172+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Travel'/><title type='text'>Malta</title><content type='html'>&lt;b&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;Bonswa, kif inti?&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;Day 1&lt;/b&gt;&lt;div&gt;We picked Dylan up from school and after a quick change we left for Manchester airport. The traffic was surprisingly quiet for rush hour and we arrived very early making me very popular as the travel planner! Our flight was delayed due to the French air traffic control strikes and we arrived at &lt;a href="http://www.blogger.com/www.maltairport.com"&gt;Luqa&lt;/a&gt; approx 3am where we promptly booked a scarily fast taxi to the hotel. We entered our room at the &lt;a href="http://www.blogger.com/www.corinthia.com/home?c=5"&gt;Corinthia Palace&lt;/a&gt; to find rose petals on the bed and complimentary wine and fruit.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Day 2&lt;/b&gt;&lt;/div&gt;&lt;div&gt;After our late arrival the night before we slept in and missed breakfast - luckily the plane food had been so good! After getting up we went for an explore and to find a shop to stock up on water and snacks. We made an attempt at finding a local shop, but in the end we bumped into an English guy who frequently visits the area and he kindly pointed us in the direction of the local &lt;a href="http://www.scotts.com.mt/"&gt;Scotts supermarket&lt;/a&gt; and &lt;a href="http://www.santaluciacafe.com/"&gt;Santa Lucia cafe&lt;/a&gt; with excellent cakes. We got a few essentials from the supermarket as well as some debatable essentials such as a bottle of &lt;a href="http://www.cisklager.com/page.asp?n=home&amp;amp;l=1"&gt;Cisk&lt;/a&gt;. In the cafe we tried our first Maltese food with a tuna &lt;a href="http://en.wikipedia.org/wiki/Maltese_cuisine#Ftira_.28Another_Maltese_Bread.29"&gt;ftira&lt;/a&gt; that was nice despite including green olives and capers both of which I am not typically a fan. We headed back to the hotel and decided to try out the pool which we found to be not heated and therefore relatively cold with it being September. The pool was refreshing nonetheless and kept us amused before getting ready for the Maltese night at the restaurant. We sampled some of the local cuisine which included &lt;a href="http://en.wikipedia.org/wiki/Maltese_cuisine#Zalzett_tal-Malti_.28Maltese_sausage.29"&gt;Maltese Sausage&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Maltese_cuisine#.C4.A0bejniet_.28Gozo_cheeselets.29.5B5.5D"&gt;Gozo Cheeselets&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Maltese_cuisine#Galletti_.28Ship.27s_Biscuit.29"&gt;Galletti&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Maltese_cuisine#Fenek_.28Rabbit.29"&gt;Rabbit Stew&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Maltese_cuisine#Kannoli_.28Cheese_or_cream_filled_pastry.29"&gt;Ricotta Kannoli&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Day 3&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Today we made our first trip on the famous &lt;a href="http://en.wikipedia.org/wiki/Malta_bus"&gt;Maltese buses&lt;/a&gt; to Freedom Square in the capital &lt;a href="http://en.wikipedia.org/wiki/Valletta"&gt;Valletta&lt;/a&gt;. We headed to &lt;a href="http://en.wikipedia.org/wiki/St._John's_Co-Cathedral"&gt;St Johns Co-Cathedral&lt;/a&gt; and the &lt;a href="http://en.wikipedia.org/wiki/Grandmaster's_Palace"&gt;Palace of the Grand Masters&lt;/a&gt; then I sampled a bottle of the national soft drink &lt;a href="http://www.kinnie.com/page.asp?n=home"&gt;Kinnie&lt;/a&gt;. After a customary look around M&amp;amp;S we headed for a walk around the hardbour taking in &lt;a href="http://en.wikipedia.org/wiki/G%C5%BCira"&gt;Manoel Island&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Fort_St_Elmo"&gt;Fort St Elmo&lt;/a&gt;, the &lt;a href="http://www.malta-info.co.uk/attractions/valletta-attractions/pages/Siege-Bell.htm"&gt;Siege Bell monument&lt;/a&gt;, the &lt;a href="http://en.wikipedia.org/wiki/Grand_Harbour"&gt;Grand Harbour&lt;/a&gt; and &lt;a href="http://www.chevron.co.uk/malta/towns/valletta-barracca.asp"&gt;Barracca gardens&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Day 4&lt;/b&gt;&lt;/div&gt;&lt;div&gt;On Day 4 we decided to go to Sliema and see what was there as it was mapped in the guide books so we assumed it must be worth the trip. After our experience in Paris we did wonder whether things would be closed with it being a Sunday and this turned out to be the case. However I don't believe we missed that much as it was just like walking through the high-street of any English town with all of the usual chain shops. We had a wander around the harbour which was nice, but full of tourist touts. We shortly headed back to the hotel where I sampled a &lt;a href="http://www.farsons.com/page.asp?p=7470"&gt;Farsons Hopleaf Pale Ale&lt;/a&gt; whilst relaxing by the pool. For lunch we visited the &lt;a href="http://www.santaluciacafe.com/"&gt;Santa Lucia cafe&lt;/a&gt; again where I had a &lt;a href="http://en.wikipedia.org/wiki/Maltese_cuisine#Kannoli_.28Cheese_or_cream_filled_pastry.29"&gt;Ricotta Kannoli&lt;/a&gt; and Corrina and Dylan fed the strays with a box of cat biscuits from the supermarket. In the bar that evening I sampled a Maltese Coffee which was an Irish Coffee using &lt;a href="http://en.wikipedia.org/wiki/Anisette"&gt;Anisette&lt;/a&gt; rather than Whiskey.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Day 5&lt;/b&gt;&lt;/div&gt;&lt;div&gt;On Monday we headed to &lt;a href="http://en.wikipedia.org/wiki/Mdina"&gt;Mdina&lt;/a&gt; which didn't really have much of a write-up in the guide books, however we were pleasantly surprised by the Greeks gate and the picturesque narrow streets leading to &lt;a href="http://en.wikipedia.org/wiki/St._Paul's_Cathedral,_Mdina"&gt;St Pauls Cathedral&lt;/a&gt;. We stopped for a brew and another ftira in the &lt;a href="http://www.maltainsideout.com/823/tea-and-cake-at-fontanella/"&gt;Fontanella Tea Rooms&lt;/a&gt;. We walked on to the adjoining town of &lt;a href="http://en.wikipedia.org/wiki/Rabat,_Malta"&gt;Rabat&lt;/a&gt; and past the &lt;a href="http://www.sacred-destinations.com/malta/rabat-st-pauls-church.htm"&gt;St Pauls Church and Grotto&lt;/a&gt;, &lt;a href="http://www.sacred-destinations.com/malta/rabat-st-pauls-catacombs.htm"&gt;St Pauls Catacombs&lt;/a&gt; and St Agathas Catacombs. At the restaurant that evening we sampled a very sweet Maltese Wine which became sickly pretty quick.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Day 6&lt;/b&gt;&lt;/div&gt;&lt;div&gt;On Tuesday we decided to visit the &lt;a href="http://www.palazzoparisio.com/"&gt;Palazzo Parisio&lt;/a&gt; at &lt;a href="http://en.wikipedia.org/wiki/Naxxar"&gt;Naxxar&lt;/a&gt; which was a venue we had looked at when toying with getting married abroad. Upon visiting the palace we pretty soon realised we had made the right decision as it was not as impressive in person as it appeared in images. The gardens at the palace contained many orange trees, which I learned are actually green and not orange, however they were not a patch on the public gardens available to visit in England. There was little else to see in Naxxar therefore we attempted to catch the bus to St Julians to see what was there. After narrowly missing the bus and then missing it again due to waiting at the wrong stop we decided to head back to our hotel and explore the &lt;a href="http://www.visitmalta.com/san-anton-gardens"&gt;San Anton gardens&lt;/a&gt; which are situated just outside the hotel. In the evening we used our HB allocation in the highly rated &lt;a href="http://malta.mydestinationinfo.com/en/rickshaw"&gt;Rickshaw restaurant&lt;/a&gt; where we sampled steam chicken dumplings for the first time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Day 7&lt;/b&gt;&lt;/div&gt;&lt;div&gt;When we awoke on the Wednesday we were pleased about making the decision to postpone our visit to the Blue Lagoon until then as the skies were also blue. We caught the bus to &lt;a href="http://en.wikipedia.org/wiki/%C4%8Airkewwa"&gt;Ċirkewwa&lt;/a&gt; then the ferry to &lt;a href="http://en.wikipedia.org/wiki/Comino"&gt;Comino&lt;/a&gt;. We were impressed by the Blue Lagoon despite being crowded with tourists and we swam in the sea and I swam the short journey across the lagoon to &lt;a href="http://en.wikipedia.org/wiki/Cominotto"&gt;Cominotto&lt;/a&gt;. Once we had dried off we went for a short walk across the island where we came across a number of lizards on the desert like land and we could see &lt;a href="http://en.wikipedia.org/wiki/St._Mary's_Tower"&gt;St Mary's Battery&lt;/a&gt; in the distance. On the walk back to the hotel we stopped off at &lt;a href="http://www.papilloncaterers.com/out_balzan.html"&gt;Cafe Papillon in Balzan&lt;/a&gt; where I sampled a bolgnese &lt;a href="http://en.wikipedia.org/wiki/Arancini"&gt;Arancini&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Day 8&lt;/b&gt;&lt;/div&gt;&lt;div&gt;On our last day we visited the hotel spa again in the morning where we spent time in the jacuzzi, pool, steam room and sauna. For lunch we made one last trip to the &lt;a href="http://www.santaluciacafe.com/"&gt;Santa Lucia cafe&lt;/a&gt; and to feed the stray cats in the park. Corrina and Dylan went to feed the strays in the San Anton gardens where an over zealous cat clawed Corrina whilst I had one last dip in the outdoor pool. We had a safer trip in the taxi to the airport and made our journey home.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Grazzi &amp;amp; narak iktar tard&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pictures&lt;/b&gt;: &lt;a href="picasaweb.google.com/g.t.hill/20100923Malta#"&gt;picasaweb.google.com/g.t.hill/20100923Malta#&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/3354578112415392473-848656443603298732?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/848656443603298732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=848656443603298732&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/848656443603298732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/848656443603298732'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/10/malta.html' title='Malta'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1901672631953761322</id><published>2010-09-23T13:37:00.002+01:00</published><updated>2010-09-23T13:57:23.183+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns + Principles'/><title type='text'>Clarified CQRS</title><content type='html'>&lt;div&gt;@UdiDahan has just clarified CQRS for me:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.udidahan.com/wp-content/uploads/cqrs.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px; height: 319px;" src="http://www.udidahan.com/wp-content/uploads/cqrs.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div&gt;&lt;b&gt;Why CQRS&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Collaboration - multiple actors using/modifying the same set of data&lt;/li&gt;&lt;li&gt;Staleness - once data has been shown to a user, that same data may have been changed by another actor&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Queries&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Use of an additional data store whose data can be a bit out of sync with the master database (if the data we're showing to the user is stale anyway)&lt;/li&gt;&lt;li&gt;Can be structured just like the ViewModel - no need to transform objects&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Query Data Storage&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Does not have to be a relational database!&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Scaling Queries&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Assuming that the data being served does not need to 100% up to date we can easily add more store instances without worrying about that they contain the exact same data&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Commands and Validation&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Clients send commands to the server - not returning errors to the client, but rather confirming/notifying the user of the outcome&lt;/li&gt;&lt;li&gt;Validation is different from business rules in that it states a context-independent fact about a command&lt;/li&gt;&lt;li&gt;Even though a command may be valid, there may still be reasons to reject it&lt;/li&gt;&lt;li&gt;The server still validates all commands, not trusting clients to do the validation&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Commands and Autonomy&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Commands don't need to be processed immediately - they can be queued&lt;/li&gt;&lt;li&gt;Shouldn't need to access the query store to process commands - any state that is needed should be managed by the autonomous component&lt;/li&gt;&lt;li&gt;Failure messages due to the database being down or hitting a deadlock should not be returned to the client - we can just rollback and try again by processing all messages in the queue&lt;/li&gt;&lt;li&gt;Each command could be processed by a different AC, each with its own queue&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Service Layers&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Each command is independent of the other - so why should we allow the objects which handle them (domain objects) to depend on each other? Dependencies are things which should be avoided, unless there is a good reason for them&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Persistence for Command Processing&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Do we really need to have a column for every single domain object property? What if we just serialized the domain entity and put it into a single column and had another column containing the ID i.e. akin to the key-value storage available from various cloud providers&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;See: http://www.udidahan.com/2009/12/09/clarified-cqrs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1901672631953761322?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1901672631953761322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1901672631953761322&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1901672631953761322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1901672631953761322'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/clarified-cqrs.html' title='Clarified CQRS'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-626344671577904549</id><published>2010-09-22T10:02:00.002+01:00</published><updated>2010-09-22T10:03:21.484+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Service'/><title type='text'>5 Ways Debugging .NET Windows Service</title><content type='html'>Some ideas on how to debug your Windows Service...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/yaleeyangmsblog/archive/2007/05/02/three-ways-debugging-net-windows-service.aspx"&gt;http://blogs.msdn.com/b/yaleeyangmsblog/archive/2007/05/02/three-ways-debugging-net-windows-service.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-626344671577904549?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/626344671577904549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=626344671577904549&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/626344671577904549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/626344671577904549'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/5-ways-debugging-net-windows-service.html' title='5 Ways Debugging .NET Windows Service'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-368444824271539971</id><published>2010-09-14T11:54:00.008+01:00</published><updated>2010-09-16T16:16:25.778+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF - Streaming Large Data</title><content type='html'>I've been re-developing our web service for sending transmitting files to better handle large files. It was using an ASP.NET ASMX web service to send a byte[] and now it is using the WCF Streamed transferMode to send a MessageContract containing a Stream via MTOM! Sounds very grand doesn't it...&lt;br /&gt;&lt;br /&gt;Found the following MSDN resources very helpful:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb332338.aspx"&gt;Hosting and Consuming WCF Services&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms195526.aspx"&gt;System.ServiceModel Namespace&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms731361.aspx"&gt;&lt;basichttpbinding&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms733742.aspx"&gt;Large Data and Streaming&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms731913.aspx"&gt;Streaming Message Transfer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms789010.aspx"&gt;How to: Enable Streaming&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa395209.aspx"&gt;MTOM Encoding&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms733127.aspx"&gt;Using Data Contracts&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms730255.aspx"&gt;Using Message Contracts&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;P.S. An annoyance whilst trying to work out why the Streamed transferMode was not working was that the Visual Studio 2010 in-built web server could not handle it. As soon as it was deployed to IIS it worked fine!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-368444824271539971?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/368444824271539971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=368444824271539971&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/368444824271539971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/368444824271539971'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/wcf-streaming-large-data.html' title='WCF - Streaming Large Data'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8494863504556182848</id><published>2010-09-07T19:34:00.002+01:00</published><updated>2010-09-07T19:36:17.234+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='JSONP'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>How JSONP Works</title><content type='html'>Good article explaining some of what's going on behind the scenes when making JSONP calls using jQuery and using it with WCF.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See: &lt;a href="http://devlicio.us/blogs/scott_seely/archive/2010/09/07/how-jsonp-works-and-some-bits-about-implementing-it-in-wcf.aspx"&gt;http://devlicio.us/blogs/scott_seely/archive/2010/09/07/how-jsonp-works-and-some-bits-about-implementing-it-in-wcf.aspx&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/3354578112415392473-8494863504556182848?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8494863504556182848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8494863504556182848&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8494863504556182848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8494863504556182848'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/how-jsonp-works.html' title='How JSONP Works'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8520258825549408243</id><published>2010-09-07T16:21:00.002+01:00</published><updated>2010-09-07T16:23:18.100+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Missing Word/Excel Application in DCOMCNFG</title><content type='html'>Was struggling to find Excel.Application or Word.Application in DCOMCNFG on Windows 2008 R2 - followed the workaround on this post (&lt;a href="http://www.sevenforums.com/microsoft-office/56884-microsoft-excel-application-entry-missing-dcomcnfg.html"&gt;http://www.sevenforums.com/microsoft-office/56884-microsoft-excel-application-entry-missing-dcomcnfg.html&lt;/a&gt;) and it seems to work...&lt;br /&gt;&lt;br /&gt;1. go to DCOMCNFG&lt;br /&gt;2. In the left tree structure, right click on My Computer and select Properties&lt;br /&gt;3. Click on COM SECURITY tab&lt;br /&gt;4. Give Permissions to Network Service and Users in the "Access Permissions" and "Launch and Activation Permissions" by clicking the Edit Default buttons.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8520258825549408243?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8520258825549408243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8520258825549408243&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8520258825549408243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8520258825549408243'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/missing-wordexcel-application-in.html' title='Missing Word/Excel Application in DCOMCNFG'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5949494780427593490</id><published>2010-09-07T10:56:00.004+01:00</published><updated>2010-10-01T21:30:05.015+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Functional Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><title type='text'>What is Functional Programming?</title><content type='html'>&lt;div&gt;A nice gentle introduction to some Functional Programming concepts such as First Class Functions, Higher Order Functions and Pure Functions.&lt;br /&gt;&lt;br /&gt;See: &lt;a href="http://devlicio.us/blogs/christopher_bennage/archive/2010/09/06/what-is-functional-programming.aspx"&gt;http://devlicio.us/blogs/christopher_bennage/archive/2010/09/06/what-is-functional-programming.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The 2nd in the series introduces Currying or Partial Application and a little bit of F#:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;See: &lt;a href="http://devlicio.us/blogs/christopher_bennage/archive/2010/09/09/what-is-functional-programming-part-2-currying.aspx"&gt;http://devlicio.us/blogs/christopher_bennage/archive/2010/09/09/what-is-functional-programming-part-2-currying.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Part 3 covers Recursion:&lt;br /&gt;&lt;br /&gt;See: &lt;a href="http://devlicio.us/blogs/christopher_bennage/archive/2010/09/14/what-is-functional-programming-part-3-recursion.aspx"&gt;http://devlicio.us/blogs/christopher_bennage/archive/2010/09/14/what-is-functional-programming-part-3-recursion.aspx&lt;/a&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/3354578112415392473-5949494780427593490?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5949494780427593490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5949494780427593490&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5949494780427593490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5949494780427593490'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/what-is-functional-programming.html' title='What is Functional Programming?'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1959188861765718457</id><published>2010-09-07T10:23:00.003+01:00</published><updated>2010-09-07T10:26:12.976+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSH'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>SharpSSH</title><content type='html'>Just received a requirement to execute shell commands via SSH and parse the responses.&lt;br /&gt;&lt;br /&gt;Referenced SharpSSH and was up and running with a prototype in a few minutes!&lt;br /&gt;&lt;br /&gt;See: &lt;a href="http://www.tamirgal.com/blog/page/SharpSSH.aspx"&gt;http://www.tamirgal.com/blog/page/SharpSSH.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1959188861765718457?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1959188861765718457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1959188861765718457&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1959188861765718457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1959188861765718457'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/sharpssh.html' title='SharpSSH'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-3151409243126411519</id><published>2010-09-05T19:52:00.000+01:00</published><updated>2010-09-05T19:52:49.302+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cycling'/><title type='text'>Cumberland Challenge 2010 Stats</title><content type='html'>&lt;a href="http://connect.garmin.com/activity/47712622"&gt;http://connect.garmin.com/activity/47712622&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-3151409243126411519?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://connect.garmin.com/activity/47712622?sms_ss=blogger' title='Cumberland Challenge 2010 Stats'/><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/3151409243126411519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=3151409243126411519&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3151409243126411519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3151409243126411519'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/cumberland-challenge-2010-stats.html' title='Cumberland Challenge 2010 Stats'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8202509959074678186</id><published>2010-09-05T19:46:00.003+01:00</published><updated>2010-09-05T19:48:29.235+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>Sassy CSS</title><content type='html'>Just been made aware of this: &lt;a href="http://sass-lang.com/"&gt;http://sass-lang.com/&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The examples on the site show how easy it would be to get immediate benefits from the Variables, Nesting, Mixins and Selector Inheritance.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8202509959074678186?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8202509959074678186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8202509959074678186&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8202509959074678186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8202509959074678186'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/sassy-css.html' title='Sassy CSS'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4838307565681257708</id><published>2010-09-01T11:25:00.002+01:00</published><updated>2010-09-01T11:29:56.720+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Configuring a proxy-server for WCF</title><content type='html'>To configure a proxy for a specific client/service endpoint, you can configure this on the binding that is used by the endpoint, eg:&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;&amp;lt;basicHttpBinding&amp;gt;&lt;br /&gt;  &amp;lt;binding name="MyClientBinding" proxyAddress="http://gateway:8080" useDefaultWebProxy="false"&amp;gt;&lt;br /&gt;  &amp;lt;/binding&amp;gt;&lt;br /&gt;&amp;lt;/basicHttpBinding&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Source: &lt;a href="http://blogs.infosupport.com/blogs/porint/archive/2007/08/14/Configuring-a-proxy_2D00_server-for-WCF.aspx"&gt;http://blogs.infosupport.com/blogs/porint/archive/2007/08/14/Configuring-a-proxy_2D00_server-for-WCF.aspx&lt;/a&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-4838307565681257708?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4838307565681257708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4838307565681257708&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4838307565681257708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4838307565681257708'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/09/configuring-proxy-server-for-wcf.html' title='Configuring a proxy-server for WCF'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1505180177266510160</id><published>2010-08-31T11:02:00.001+01:00</published><updated>2010-08-31T11:04:28.392+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>The Null Coalescing Operator (??)</title><content type='html'>Wasn't aware of the ?? operator until reading James Michael Hare's 'Five Little Wonders That Make Code Better' post:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;string name = value ?? string.Empty;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://geekswithblogs.net/BlackRabbitCoder/archive/2010/08/26/c.net-five-little-wonders-that-make-code-better-1-of.aspx"&gt;http://geekswithblogs.net/BlackRabbitCoder/archive/2010/08/26/c.net-five-little-wonders-that-make-code-better-1-of.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1505180177266510160?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1505180177266510160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1505180177266510160&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1505180177266510160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1505180177266510160'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/08/null-coalescing-operator.html' title='The Null Coalescing Operator (??)'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4163381070643763722</id><published>2010-08-31T10:56:00.001+01:00</published><updated>2010-08-31T10:57:57.351+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns + Principles'/><title type='text'>Eventual Consistency</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Eventual_consistency"&gt;http://en.wikipedia.org/wiki/Eventual_consistency&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Eventual consistency is one of the consistency models used in the domain of parallel programming, for example in distributed shared memory, distributed transactions, and optimistic replication.&lt;br /&gt;&lt;br /&gt;The term itself suggests the following definition: when no updates occur for a long period of time, eventually all updates will propagate through the system and all the replicas will be consistent. While some authors use that definition (e.g., the Vogels citation above), others prefer a stronger definition that requires good things to happen even in the presence of continuing updates, reconfigurations, or failures. In the Terry et. al. work referenced above, eventual consistency means that for a given accepted update and a given replica eventually either the update reaches the replica or the replica retires from service.&lt;br /&gt;&lt;br /&gt;In database terminology, this is known as BASE (Basically Available, Soft state, Eventual consistency), as opposed to the database concept of ACID.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-4163381070643763722?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4163381070643763722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4163381070643763722&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4163381070643763722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4163381070643763722'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/08/eventual-consistency.html' title='Eventual Consistency'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4151522809941733447</id><published>2010-08-29T19:11:00.000+01:00</published><updated>2010-09-05T19:52:49.304+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cycling'/><title type='text'>Cumberland Challenge Training Stats</title><content type='html'>&lt;a href="http://connect.garmin.com/activity/46701654"&gt;http://connect.garmin.com/activity/46701654&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-4151522809941733447?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://connect.garmin.com/activity/46701654?sms_ss=blogger' title='Cumberland Challenge Training Stats'/><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4151522809941733447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4151522809941733447&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4151522809941733447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4151522809941733447'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/08/cumberland-challenge-training-stats.html' title='Cumberland Challenge Training Stats'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5451976771834495135</id><published>2010-08-20T12:20:00.001+01:00</published><updated>2010-08-20T12:22:04.959+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>How to Run a Meeting</title><content type='html'>As always an interesting post from Rands on How to Run a Meeting:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.randsinrepose.com/archives/2010/08/19/how_to_run_a_meeting.html"&gt;http://www.randsinrepose.com/archives/2010/08/19/how_to_run_a_meeting.html&lt;/a&gt;  &lt;br /&gt;&lt;br /&gt;Some thoughts on refereeing, meeting culture and improvisation I hope to try out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5451976771834495135?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5451976771834495135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5451976771834495135&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5451976771834495135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5451976771834495135'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/08/how-to-run-meeting.html' title='How to Run a Meeting'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5276220140360015252</id><published>2010-08-20T09:46:00.002+01:00</published><updated>2010-08-20T09:48:34.241+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Visual Studio 2010 Productivity Power Tools</title><content type='html'>I'm one of those sad enough to enjoy the 'Tabify' feature in the Visual Studio 2010 Productivity Power Tools! Tidies up your code by changing spaces to tabs at the click of a button...&lt;br /&gt;&lt;br /&gt;Get it here: &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef"&gt;http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5276220140360015252?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5276220140360015252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5276220140360015252&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5276220140360015252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5276220140360015252'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/08/visual-studio-2010-productivity-power.html' title='Visual Studio 2010 Productivity Power Tools'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-2107931514775321984</id><published>2010-08-20T09:13:00.001+01:00</published><updated>2010-08-20T09:14:56.961+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Detect Client IP in WCF 3.5</title><content type='html'>Handy litte post showing how to detect the client IP in WCF (3.5 or 4.0).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nayyeri.net/detect-client-ip-in-wcf-3-5"&gt;http://nayyeri.net/detect-client-ip-in-wcf-3-5&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-2107931514775321984?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/2107931514775321984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=2107931514775321984&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2107931514775321984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2107931514775321984'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/08/detect-client-ip-in-wcf-35.html' title='Detect Client IP in WCF 3.5'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-9006932608786667381</id><published>2010-07-31T19:01:00.004+01:00</published><updated>2010-07-31T19:07:38.003+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Peopleware - Part 2 - The Office Environment</title><content type='html'>"There are a million ways to lose a work day, but not even a single way to get one back."&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Chapter 7: The Furniture Police&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"The people who control space and services...don't strive to understand complex issues like productivity...the reason for this is that they are not themselves doing the kind of work likely to suffer from a poor environment."&lt;/li&gt;&lt;li&gt;"Almost without exception, the workspaces given to intellect workers are noisy, interruptible, unprivate and sterile."&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Chapter 8: You never get anything done round here between 9 and 5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"To be productive, people may come in early or stay late or even try to escape entirely, by staying at home for a day to get a critical piece of work done."&lt;/li&gt;&lt;li&gt;"The amazing thing is not that it's so often impossible to work in the workplace, the amazing thing is that everyone knows it and nobody ever does anything about it."&lt;/li&gt;&lt;li&gt;"Top performers space is quieter, more private, better protected from interruption, and there is more of it."&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Chapter 9: Saving money on space&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"The environmental trend is toward less privacy, less dedicated space, and more noise. The obvious reason for this is cost."&lt;/li&gt;&lt;li&gt;"Without warning open plan seating was upon us like a plague upon the land. The advocates of the new format produced not one shred of evidence that effectiveness would not be impaired."&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-9006932608786667381?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/9006932608786667381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=9006932608786667381&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9006932608786667381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/9006932608786667381'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/07/peopleware-part-2-office-environment.html' title='Peopleware - Part 2 - The Office Environment'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1652223601058971344</id><published>2010-07-29T22:51:00.003+01:00</published><updated>2010-09-05T19:52:59.191+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><category scheme='http://www.blogger.com/atom/ns#' term='Cycling'/><title type='text'>Send to Garmin from Google Maps</title><content type='html'>&lt;div&gt;Great short tutorial from the Garmin Blog on how to send to GPS from Google Maps&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;http://www.youtube.com/watch?v=N_p1x-fL2zc&amp;amp;feature=player_embedded&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Never dreamt it would be so simple.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1652223601058971344?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1652223601058971344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1652223601058971344&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1652223601058971344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1652223601058971344'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/07/send-to-garmin-from-google-maps.html' title='Send to Garmin from Google Maps'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1168947169231339970</id><published>2010-07-29T21:55:00.002+01:00</published><updated>2010-07-29T21:57:05.838+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cycling'/><title type='text'>Longtown - Kirkpatrick Fleming - Waterbeck - Canonbie - Moat - Longtown</title><content type='html'>&lt;div&gt;Learned a valuable lesson with the nutrition today - didn't eat as not feeling hungry, but this meant was running on empty after 30 miles. Almost 3,000 calories burnt - says it all why need to get fuel on board.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://connect.garmin.com/activity/42335246"&gt;http://connect.garmin.com/activity/42335246&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1168947169231339970?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1168947169231339970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1168947169231339970&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1168947169231339970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1168947169231339970'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/07/longtown-kirkpatrick-fleming-waterbeck.html' title='Longtown - Kirkpatrick Fleming - Waterbeck - Canonbie - Moat - Longtown'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-2494288176531394382</id><published>2010-07-20T10:26:00.001+01:00</published><updated>2010-07-20T10:26:52.291+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Well-known security identifiers in Windows operating systems</title><content type='html'>&lt;a href="http://support.microsoft.com/kb/243330"&gt;http://support.microsoft.com/kb/243330&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-2494288176531394382?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/2494288176531394382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=2494288176531394382&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2494288176531394382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2494288176531394382'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/07/well-known-security-identifiers-in.html' title='Well-known security identifiers in Windows operating systems'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-3035122780237407458</id><published>2010-06-14T08:50:00.000+01:00</published><updated>2010-06-14T08:52:14.231+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC 2'/><title type='text'>Anti-Forgery Request Recipes For ASP.NET MVC And AJAX</title><content type='html'>&lt;p&gt;Some insightful solutions for anti-forgery request scenarios in ASP.NET MVC and AJAX: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;How to enable validation on controller, instead of on each action; &lt;/li&gt;&lt;li&gt;How to specify non-constant token salt in runtime; &lt;/li&gt;&lt;li&gt;How to work with the server side validation in AJAX scenarios.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Source: &lt;a href="http://weblogs.asp.net/dixin/archive/2010/05/22/anti-forgery-request-recipes-for-asp-net-mvc-and-ajax.aspx"&gt;http://weblogs.asp.net/dixin/archive/2010/05/22/anti-forgery-request-recipes-for-asp-net-mvc-and-ajax.aspx&lt;/a&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-3035122780237407458?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/3035122780237407458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=3035122780237407458&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3035122780237407458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3035122780237407458'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/06/anti-forgery-request-recipes-for-aspnet.html' title='Anti-Forgery Request Recipes For ASP.NET MVC And AJAX'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-989608776806749761</id><published>2010-06-10T14:22:00.002+01:00</published><updated>2010-06-10T14:24:57.532+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Classic ASP'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 7.5'/><title type='text'>The Template Persistent Cache initialization failed for Application Pool</title><content type='html'>&lt;span style="font-family:courier new;"&gt;Error: The Template Persistent Cache initialization failed for Application Pool 'DefaultAppPool' because of the following error: Could not create a Disk Cache Sub-directory for the Application Pool. The data may have additional error codes..&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Check the path for ASP cache:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;%windir%\system32\inetsrv\appcmd list config -section:system.webServer/asp&lt;br /&gt;&lt;system.webserver&gt;&lt;asp&gt;&lt;session&gt;&lt;complus&gt;&lt;cache disktemplatecachedirectory="%SystemDrive%\inetpub\temp\ASP Compiled Templates"&gt;&lt;limits&gt;&lt;/asp&gt;&lt;/SYSTEM.WEBSERVER&gt;&lt;br /&gt;&lt;strong&gt;Ensure the path exists (from above):&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;mkdir "%SystemDrive%\inetpub\temp\ASP Compiled Templates"&lt;br /&gt;&lt;br /&gt;A subdirectory or file C:\inetpub\temp\ASP Compiled Templates already exists.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ensure the permissions include NETWORK SERVICE:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;icacls "%SystemDrive%\inetpub\temp\ASP Compiled Templates" /grant "NETWORK SERVICE:(OI)(CI)(M)"&lt;br /&gt;&lt;br /&gt;processed file: C:\inetpub\temp\ASP Compiled Templates&lt;br /&gt;Successfully processed 1 files; Failed processing 0 files&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://theether.net/kb/100127"&gt;http://theether.net/kb/100127&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-989608776806749761?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/989608776806749761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=989608776806749761&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/989608776806749761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/989608776806749761'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/06/template-persistent-cache.html' title='The Template Persistent Cache initialization failed for Application Pool'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4777075218111252813</id><published>2010-06-10T14:08:00.001+01:00</published><updated>2010-06-10T14:10:12.945+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS 7.5'/><title type='text'>Failed Request Tracing - XSLT Error</title><content type='html'>Having problems trying to browse Failed Request Log Files in IE? Add "about:internet" as to the list of trusted sites in IE!&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://forums.iis.net/p/1147605/1862016.aspx"&gt;http://forums.iis.net/p/1147605/1862016.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-4777075218111252813?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4777075218111252813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4777075218111252813&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4777075218111252813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4777075218111252813'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/06/failed-request-tracing-xslt-error.html' title='Failed Request Tracing - XSLT Error'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-6119914086042019592</id><published>2010-06-09T13:25:00.001+01:00</published><updated>2010-06-09T13:27:40.178+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server – MAXDOP Settings to Limit Query to Run on Specific CPU</title><content type='html'>MAXDOP – Maximum Degree Of Parallelism can be set to restrict query to run on a certain CPU. Please note that this query cannot restrict or dictate which CPU to be used, but for sure, it restricts the usage of number of CPUs in a single batch:&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;USE AdventureWorks&lt;br /&gt;GO&lt;br /&gt;SELECT *&lt;br /&gt;FROM Sales.SalesOrderDetail&lt;br /&gt;ORDER BY ProductID&lt;br /&gt;OPTION (MAXDOP 1)&lt;br /&gt;GO&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;a href="http://blog.sqlauthority.com/2010/03/15/sql-server-maxdop-settings-to-limit-query-to-run-on-specific-cpu/"&gt;http://blog.sqlauthority.com/2010/03/15/sql-server-maxdop-settings-to-limit-query-to-run-on-specific-cpu/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-6119914086042019592?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/6119914086042019592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=6119914086042019592&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6119914086042019592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6119914086042019592'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/06/sql-server-maxdop-settings-to-limit.html' title='SQL Server – MAXDOP Settings to Limit Query to Run on Specific CPU'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-6255643342738293564</id><published>2010-06-07T10:41:00.002+01:00</published><updated>2010-06-07T10:44:31.982+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WatiN'/><title type='text'>WatiN on Windows Server 2008 / IE8</title><content type='html'>Got to the bottom of my WatiN issues when trying to run a simple test on our Windows Server 2008 development machine with IE8. I kept getting the following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.Runtime.InteropServices.COMException : The interface is unknown. (Exception from HRESULT: 0x800706B5)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Thankfully SO can to the rescue again: &lt;a href="http://stackoverflow.com/questions/1014815/how-do-you-get-watin-to-work-on-windows-server-2008-with-ie8"&gt;http://stackoverflow.com/questions/1014815/how-do-you-get-watin-to-work-on-windows-server-2008-with-ie8&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Run VS as Administrator!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-6255643342738293564?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/6255643342738293564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=6255643342738293564&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6255643342738293564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6255643342738293564'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/06/watin-on-windows-server-2008-ie8.html' title='WatiN on Windows Server 2008 / IE8'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7694397760093055034</id><published>2010-05-30T20:00:00.003+01:00</published><updated>2010-06-05T21:16:40.288+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Wedding Directions and Hotel</title><content type='html'>&lt;div&gt;&lt;b&gt;Hotels in Carlisle City Centre&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Travelodge, Carlisle Central&lt;br /&gt;&lt;a href="http://www.travelodge.co.uk/search_and_book/hotel_overview.php?hotel_id=362"&gt;http://www.travelodge.co.uk/search_and_book/hotel_overview.php?hotel_id=362&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Hotel Ibis&lt;br /&gt;&lt;a href="http://www.ibishotel.com/gb/hotel-3443-ibis-carlisle/index.shtml"&gt;http://www.ibishotel.com/gb/hotel-3443-ibis-carlisle/index.shtml&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.ibishotel.com/gb/hotel-3443-ibis-carlisle/index.shtml"&gt;&lt;/a&gt;County Hotel&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.countycarlisle.com/"&gt;http://www.countycarlisle.com/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Crown &amp;amp; Mitre&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.peelhotels.co.uk/hotels/crown-and-mitre-hotel-carlisle-cumbria-england/"&gt;http://www.peelhotels.co.uk/hotels/crown-and-mitre-hotel-carlisle-cumbria-england/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hallmark Hotel&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.hallmarkhotels.co.uk/carlisle/default-en.html"&gt;http://www.hallmarkhotels.co.uk/carlisle/default-en.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Hotel in Longtown&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.countycarlisle.com/"&gt;&lt;/a&gt;Graham Arms Hotel, Longtown&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.grahamarms.com/"&gt;http://www.grahamarms.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Directions from Arthuret Church, Longtown to Tithe Barn, Carlisle&lt;/b&gt;&lt;br /&gt;&lt;a href="http://maps.google.co.uk/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=Unknown+road&amp;amp;daddr=West+Walls,+Carlisle+CA3+8UF+(Methodist%40tithebarn)&amp;amp;hl=en&amp;amp;geocode=FUk6RwMdvanS_w%3BCcLsQJYD29k4FWmbRQMdZSvT_yGvOPJDqyFYuQ&amp;amp;mra=pe&amp;amp;mrcr=0&amp;amp;sll=54.874068,-2.943241&amp;amp;sspn=0.455916,1.234589&amp;amp;ie=UTF8&amp;amp;ll=55.023889,-2.91069&amp;amp;spn=0.113556,0.308647&amp;amp;t=h&amp;amp;z=12"&gt;http://maps.google.co.uk/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=Unknown+road&amp;amp;daddr=West+Walls,+Carlisle+CA3+8UF+(Methodist%40tithebarn)&amp;amp;hl=en&amp;amp;geocode=FUk6RwMdvanS_w%3BCcLsQJYD29k4FWmbRQMdZSvT_yGvOPJDqyFYuQ&amp;amp;mra=pe&amp;amp;mrcr=0&amp;amp;sll=54.874068,-2.943241&amp;amp;sspn=0.455916,1.234589&amp;amp;ie=UTF8&amp;amp;ll=55.023889,-2.91069&amp;amp;spn=0.113556,0.308647&amp;amp;t=h&amp;amp;z=12&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-7694397760093055034?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7694397760093055034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7694397760093055034&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7694397760093055034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7694397760093055034'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/wedding-directions-and-hotel.html' title='Wedding Directions and Hotel'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8040975652542635075</id><published>2010-05-22T16:51:00.030+01:00</published><updated>2010-05-22T20:20:21.559+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns + Principles'/><title type='text'>Microsoft .NET: Architecting Applications for the Enterprise</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YHz61vBBh7E/S_gM2J4ffxI/AAAAAAAABdc/yFvUHxjBnLU/s1600/51CUQrPctDL._SL500_AA300_.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 150px; height: 150px;" src="http://2.bp.blogspot.com/_YHz61vBBh7E/S_gM2J4ffxI/AAAAAAAABdc/yFvUHxjBnLU/s400/51CUQrPctDL._SL500_AA300_.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5474139471574171410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Just finished reading the above - here are the key things I have taken away from it as a collection of links:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Architecture Today&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.iso-architecture.org/ieee-1471/"&gt;ANSI/IEEE standard 1471 / ISO/IEC 42010:2007&lt;/a&gt; - Recommended Practice for Architectural Description of Software-intensive Systems&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=32620"&gt;ISO/IEC 19501&lt;/a&gt; - Unified Modeling Language (UML) Version 1.4.2&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/ISO/IEC_9126"&gt;ISO/IEC 9126&lt;/a&gt; - Software Engineering Product Quality&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/ISO_12207"&gt;ISO/IEC 12207&lt;/a&gt; - Software Lifecycle Processes &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.uk/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1274543935&amp;amp;sr=8-1"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt; - &lt;a href="http://martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.murphys-laws.com/"&gt;Murphy's Laws&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;UML Essentials&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.methodsandtools.com/archive/archive.php?id=71"&gt;UML &amp;amp; MDA vs Domain Specific Languages (DSL)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Round-trip_engineering"&gt;UML round trip engineering&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.asfusion.com/blog/entry/uml-as-a-sketch-blueprint"&gt;UML as a sketch vs UML as a blueprint&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.uk/UML-Distilled-Standard-Addison-Wesley-Technology/dp/0321193687/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1274544511&amp;amp;sr=8-1"&gt;UML Distilled&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Use_case"&gt;Use Cases&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Class_diagram"&gt;Class Diagram&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Sequence_diagram"&gt;Sequence Diagram&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Design Principles &amp;amp; Patterns&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Layer_(object-oriented_design)"&gt;Layers&lt;/a&gt; - &lt;a href="http://en.wikipedia.org/wiki/Spaghetti_code"&gt;Spaghetti Code&lt;/a&gt; vs &lt;a href="http://en.wikipedia.org/wiki/Spaghetti_code#Lasagna_code"&gt;Lasagne Code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/High_cohesion"&gt;High Cohesion&lt;/a&gt; / &lt;a href="http://en.wikipedia.org/wiki/Single_responsibility_principle"&gt;Single Responsibility Principle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Loose_coupling"&gt;Loose Coupling&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Separation_of_concerns"&gt;Separation of Concerns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms229042.aspx"&gt;Design Guidelines for Developing Class Libraries&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.uk/Design-patterns-elements-reusable-object-oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1274545071&amp;amp;sr=8-1"&gt;Design patterns: elements of reusable object-oriented software&lt;/a&gt; - Gang of Four&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Open/closed_principle"&gt;Open/Closed Principle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Liskov_substitution_principle"&gt;Liskov Substitution Principle&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Dependency_inversion_principle"&gt;Dependency Inversion Principle&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.uk/Refactoring-Patterns-Addison-Wesley-Signature-Kerievsky/dp/0321213351/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1274545283&amp;amp;sr=8-1"&gt;Refactoring to Patterns&lt;/a&gt; - Joshua Kerievsky&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dofactory.com/Default.aspx"&gt;Data &amp;amp; Object Factory&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Anti-pattern"&gt;Anti-Patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;IoC Frameworks - &lt;a href="http://msdn.microsoft.com/en-us/library/ff647202.aspx"&gt;Unity&lt;/a&gt;, &lt;a href="http://www.castleproject.org/container/index.html"&gt;Castle Windsor&lt;/a&gt;, &lt;a href="http://ninject.org/"&gt;Ninject&lt;/a&gt;, &lt;a href="http://www.springframework.net/"&gt;Spring.NET&lt;/a&gt;, &lt;a href="http://structuremap.github.com/structuremap/index.html"&gt;StructureMap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Design_For_Test"&gt;Design for Testability&lt;/a&gt; - &lt;a href="http://en.wikipedia.org/wiki/Test_stubs"&gt;Stubs&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Test_Double"&gt;Doubles&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Mock_Object"&gt;Mocks / Fakes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Mocking Frameworks - &lt;a href="http://www.nmock.org/"&gt;NMock&lt;/a&gt;, &lt;a href="http://site.typemock.com/"&gt;TypeMock&lt;/a&gt;, &lt;a href="http://www.ayende.com/projects/rhino-mocks.aspx"&gt;RhinoMocks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Design_by_contract"&gt;Design by Contract&lt;/a&gt; - &lt;a href="http://research.microsoft.com/en-us/projects/contracts/"&gt;Code Contracts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Unit Testing Tools - &lt;a href="http://en.wikipedia.org/wiki/MSTest"&gt;MSTest&lt;/a&gt;, &lt;a href="http://www.mbunit.com/"&gt;MBUnit&lt;/a&gt;, &lt;a href="http://www.nunit.org/"&gt;NUnit&lt;/a&gt;, &lt;a href="http://xunit.codeplex.com/"&gt;XUnit.NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Static Analysis Tools - &lt;a href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx"&gt;FxCop&lt;/a&gt;, &lt;a href="http://code.msdn.microsoft.com/sourceanalysis"&gt;StyleCop&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Security - &lt;a href="http://blogs.msdn.com/sdl/"&gt;Security Development Cycle&lt;/a&gt; (SD3+C), &lt;a href="http://msdn.microsoft.com/en-us/library/930b76w0(VS.71).aspx"&gt;Code Access Security&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ee823878(CS.20).aspx"&gt;STRIDE Threat Model&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/aa302419.aspx"&gt;DREAD&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;XSS&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/SQL_injection"&gt;SQL Injection&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Buffer_overflow"&gt;Buffer Overflow Exploitation&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Fuzz_testing"&gt;Fuzz Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;Aspect-Oriented Programming&lt;/a&gt; - &lt;a href="http://msdn.microsoft.com/en-us/library/ff650672.aspx"&gt;Policy Injection Application Block&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself"&gt;DRY&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/YAGNI"&gt;YAGNI&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Abstraction_principle_(programming)"&gt;Once and Only Once&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The Business Layer&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/transactionScript.html"&gt;Transaction Script pattern&lt;/a&gt; and &lt;a href="http://c2.com/cgi/wiki?CommandPattern"&gt;Command pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/tableModule.html"&gt;Table Module pattern&lt;/a&gt; - &lt;a href="http://msdn.microsoft.com/en-us/library/zb0sdh0b(VS.80).aspx"&gt;ADO.NET DataSet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/activeRecord.html"&gt;Active Record pattern&lt;/a&gt; - &lt;a href="http://msdn.microsoft.com/en-us/library/bb425822.aspx"&gt;LINQ-to-SQL&lt;/a&gt;, &lt;a href="http://www.castleproject.org/activerecord/index.html"&gt;Castle ActiveRecord&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/domainModel.html"&gt;Domain Model pattern&lt;/a&gt; - &lt;a href="http://domaindrivendesign.org/"&gt;Domain Driven Design&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The Service Layer&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/serviceLayer.html"&gt;Service Layer pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/remoteFacade.html"&gt;Remote Façade pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/dataTransferObject.html"&gt;Data Transfer Object (DTO) pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Adapter_pattern"&gt;Adapter pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;Service Oriented Architecture (SOA)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The Data Access Layer (DAL)&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete"&gt;CRUD Services&lt;/a&gt; - &lt;a href="http://martinfowler.com/eaaCatalog/dataMapper.html"&gt;Data Mapper pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Query Services - &lt;a href="http://martinfowler.com/eaaCatalog/queryObject.html"&gt;Query/Criteria Object pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Transactions - &lt;a href="http://martinfowler.com/eaaCatalog/unitOfWork.html"&gt;Unit of Work pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Concurrency - &lt;a href="http://martinfowler.com/eaaCatalog/optimisticOfflineLock.html"&gt;Optomistic Concurrency (OOL)&lt;/a&gt;, &lt;a href="http://martinfowler.com/eaaCatalog/pessimisticOfflineLock.html"&gt;Pessimistic Concurrency&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/separatedInterface.html"&gt;Separated Interface pattern&lt;/a&gt; - &lt;a href="http://martinfowler.com/eaaCatalog/repository.html"&gt;Repository pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/plugin.html"&gt;Plugin pattern&lt;/a&gt; / &lt;a href="http://java.sun.com/blueprints/patterns/ServiceLocator.html"&gt;Service Locator pattern&lt;/a&gt; - &lt;a href="http://en.wikipedia.org/wiki/Inversion_of_control"&gt;Inversion of Control pattern&lt;/a&gt; / &lt;a href="http://en.wikipedia.org/wiki/Dependency_injection"&gt;Dependency Injection&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/identityMap.html"&gt;Identity Map pattern&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;Lazy (Deferred) Loading pattern&lt;/a&gt; - &lt;a href="http://www.nhforge.org/doc/nh/en/index.html"&gt;dynamic fetch plans&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Object Relational Mappers - &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/ado-net-entity.aspx"&gt;Entity Framework&lt;/a&gt; (EF), &lt;a href="http://msdn.microsoft.com/en-us/library/bb425822.aspx"&gt;LINQ-to-SQL&lt;/a&gt;, &lt;a href="http://nhforge.org/Default.aspx"&gt;NHibernate&lt;/a&gt;, &lt;a href="http://www.entityspaces.net/"&gt;EntitySpaces&lt;/a&gt;, &lt;a href="http://www.genom-e.com/"&gt;Genome&lt;/a&gt;, &lt;a href="http://www.llblgen.com/"&gt;LLBLGen Pro&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Persistence Ignorance (PI) - &lt;a href="http://en.wikipedia.org/wiki/Plain_Old_CLR_Object"&gt;POCO's&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bloggingabout.net/blogs/adelkhalil/archive/2008/01/06/the-myth-of-stored-procedures-preference.aspx"&gt;Myths about Stored Procedures&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The Presentation Layer&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaDev/AutonomousView.html"&gt;Autonomous View&lt;/a&gt; (AV)&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaDev/SeparatedPresentation.html"&gt;Separated Presentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;Model View Controller&lt;/a&gt; (MVC) - &lt;a href="http://www.asp.net/mvc"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://www.castleproject.org/monorail/"&gt;Castle MonoRail&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Model_2"&gt;Model2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Model-view-presenter"&gt;Model View Presenter&lt;/a&gt; (MVP) - &lt;a href="http://martinfowler.com/eaaDev/PassiveScreen.html"&gt;Passive View&lt;/a&gt; (PV), &lt;a href="http://martinfowler.com/eaaDev/SupervisingPresenter.html"&gt;Supervising Controller&lt;/a&gt; (SVC)&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/eaaDev/PresentationModel.html"&gt;Presentation Model&lt;/a&gt; (PM) - &lt;a href="http://en.wikipedia.org/wiki/Model_View_ViewModel"&gt;Model View ViewModel&lt;/a&gt; (MVVM)&lt;/li&gt;&lt;li&gt;Testing the UI - &lt;a href="http://watin.sourceforge.net/"&gt;WatiN&lt;/a&gt;, &lt;a href="http://seleniumhq.org/"&gt;Selenium&lt;/a&gt;, &lt;a href="http://www.artoftest.com/"&gt;WebAii&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://behaviour-driven.org/"&gt;Behaviour Driven Development&lt;/a&gt; (BDD) - &lt;a href="http://cukes.info/"&gt;Cucumber&lt;/a&gt;, &lt;a href="http://specflow.org/"&gt;SpecFlow&lt;/a&gt;, &lt;a href="http://nbehave.googlecode.com/"&gt;NBehave&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8040975652542635075?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8040975652542635075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8040975652542635075&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8040975652542635075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8040975652542635075'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/microsoft-net-architecting-applications.html' title='Microsoft .NET: Architecting Applications for the Enterprise'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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/_YHz61vBBh7E/S_gM2J4ffxI/AAAAAAAABdc/yFvUHxjBnLU/s72-c/51CUQrPctDL._SL500_AA300_.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8674423468759582352</id><published>2010-05-19T09:49:00.003+01:00</published><updated>2010-05-19T09:51:05.558+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Platform Installer'/><title type='text'>Windows Server 2008 R2 - "Web Platform Installer could not start"</title><content type='html'>I was getting the common "Web Platform Installer could not start..." error trying to install WPI on 2008 R2. Grabbing the x64 installer from this link solved the problem for me: &lt;a href="http://go.microsoft.com/fwlink/?LinkId=146055"&gt;http://go.microsoft.com/fwlink/?LinkId=146055&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8674423468759582352?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8674423468759582352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8674423468759582352&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8674423468759582352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8674423468759582352'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/windows-server-2008-r2-web-platform.html' title='Windows Server 2008 R2 - &quot;Web Platform Installer could not start&quot;'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-5799950049007303857</id><published>2010-05-17T15:54:00.002+01:00</published><updated>2010-05-17T15:58:14.552+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS 6'/><title type='text'>Setting up an IIS6 Application Pool Identity</title><content type='html'>&lt;p&gt;Annoyingly I keep forgetting the 'User Rights Assignments' to be assigned when setting up an IIS6 app pool to run under a different identity i.e. a domain user. They are listed nicely on &lt;a href="http://beyondthispoint.blogspot.com/"&gt;Peter Stromquist's&lt;/a&gt; blog &lt;a href="http://beyondthispoint.blogspot.com/2006/04/setting-up-iis6-application-pool.html"&gt;here&lt;/a&gt;: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Add the account to the local IIS_WPG security group&lt;/li&gt;&lt;li&gt;Open the Group Policy Editor for the local computer (gpedit.msc)&lt;/li&gt;&lt;li&gt;Drill down to: Local Computer Policy/Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments&lt;/li&gt;&lt;li&gt;Add the new identity account to the following polices:&lt;br /&gt;- Adjust memory quotas for a process&lt;br /&gt;- Logon as a service&lt;br /&gt;- Replace a process level token &lt;/li&gt;&lt;li&gt;If your web application is going to host any web services, you need to also give your account Delete access to the C:\WINDOWS\Temp directory. Note: this is done via the Advanced dialog in the Security page of the Explorer folder properties dialog box&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-5799950049007303857?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/5799950049007303857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=5799950049007303857&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5799950049007303857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/5799950049007303857'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/setting-up-iis6-application-pool.html' title='Setting up an IIS6 Application Pool Identity'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-195658881614071700</id><published>2010-05-17T11:24:00.003+01:00</published><updated>2010-05-17T11:31:16.123+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>HashSet(T)</title><content type='html'>I had my Java head on and was looking for a collection where I could just add items and it would take care of not creating the duplicates and was pleased to find .NET also has a HashSet:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;[SerializableAttribute]&lt;br /&gt;[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]&lt;br /&gt;public class HashSet&amp;lt;T&amp;gt; : ISerializable, IDeserializationCallback, &lt;br /&gt;    ISet&amp;lt;T&amp;gt;, ICollection&amp;lt;T&amp;gt;, IEnumerable&amp;lt;T&amp;gt;, IEnumerable&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The HashSet&lt;t&gt; class provides high performance set operations. A set is a collection that contains no duplicate elements, and whose elements are in no particular order.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb359438.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-195658881614071700?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/195658881614071700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=195658881614071700&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/195658881614071700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/195658881614071700'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/hashsett.html' title='HashSet(T)'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-3720622042547460426</id><published>2010-05-17T11:19:00.002+01:00</published><updated>2010-05-17T11:23:03.030+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Active Directory'/><title type='text'>Active Directory - Enumerating Members of a Group</title><content type='html'>Was looking today how to enumerate the members of an AD Group - found an easy example here: &lt;a href="http://msdn.microsoft.com/en-us/library/ms180906(VS.80).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms180906(VS.80).aspx&lt;/a&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;DirectoryEntry group = new DirectoryEntry(&amp;quot;LDAP://CN=Sales,DC=Fabrikam,DC=COM&amp;quot;);&lt;br /&gt;object members = group.Invoke(&amp;quot;Members&amp;quot;, null);&lt;br /&gt;foreach(object member in (IEnumerable)members)&lt;br /&gt;{&lt;br /&gt;    DirectoryEntry x = new DirectoryEntry(member);&lt;br /&gt;    Console.WriteLine(x.Name);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-3720622042547460426?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/3720622042547460426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=3720622042547460426&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3720622042547460426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/3720622042547460426'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/active-directory-enumerating-members-of.html' title='Active Directory - Enumerating Members of a Group'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7674468094727684838</id><published>2010-05-15T23:11:00.003+01:00</published><updated>2010-05-15T23:13:13.255+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Travel'/><title type='text'>Hotel Everest View, Nepal</title><content type='html'>&lt;div&gt;Gotta stay and drink a cup of tea here at least once in my life...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YHz61vBBh7E/S-8cRlP3r8I/AAAAAAAABbc/I6SIkQEzBhY/s1600/views6.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 227px;" src="http://3.bp.blogspot.com/_YHz61vBBh7E/S-8cRlP3r8I/AAAAAAAABbc/I6SIkQEzBhY/s400/views6.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5471623160660471746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.hoteleverestview.com/"&gt;http://www.hoteleverestview.com/&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/3354578112415392473-7674468094727684838?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7674468094727684838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7674468094727684838&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7674468094727684838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7674468094727684838'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/hotel-everest-view-nepal.html' title='Hotel Everest View, Nepal'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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://3.bp.blogspot.com/_YHz61vBBh7E/S-8cRlP3r8I/AAAAAAAABbc/I6SIkQEzBhY/s72-c/views6.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-969389676946649648</id><published>2010-05-14T22:00:00.007+01:00</published><updated>2010-05-14T22:35:47.220+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Peopleware - Part 1 - Managing the Human Resource</title><content type='html'>&lt;div&gt;Chapter 1: Somewhere today, a project is failing&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"The major problems of our work are not so much technological as sociological in nature."&lt;/li&gt;&lt;li&gt;"Most managers are willing to concede the idea that they've got more people worries than technical worries, but they seldom manage that way."&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Chapter 2: Make a cheeseburger, sell a cheeseburger&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"Development is inherently different from production, but managers of development often allow their thinking to be shaped by a management philosophy derived entirely from a production environment."&lt;/li&gt;&lt;li&gt;"The 'make a cheeseburger, sell a cheeseburger' mentality can be fatal in your development area. It can only server to damp your people's spirits and focus their attention away from the real problems at hand."&lt;/li&gt;&lt;li&gt;"Encourage people to make some errors. Ask folks on occasion what dead-end roads they've been down recently."&lt;/li&gt;&lt;li&gt;"You may be able to kick people to make them active, but not to make them creative, inventive and thoughtful."&lt;/li&gt;&lt;li&gt;"The uniqueness of every worker is a continued annoyance to the manager who has blindly adopted a management style from the production world."&lt;/li&gt;&lt;li&gt;"Catalysts - someone who can help a project to jell is worth two people who just do work."&lt;/li&gt;&lt;li&gt;"If an excuse is needed for the lack of think time, the excuse is always time pressure as though there were ever work to be done without time pressure."&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Chapter 3: Vienna waits for you&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"Productivity ought to mean achieving more in an hour, but too often it has come to mean extracting more for an hour of pay."&lt;/li&gt;&lt;li&gt;"Although staff may be exposed to the message 'work longer and harder' while they're at the office, they're getting a very different message at home such as 'life is passing you by'."&lt;/li&gt;&lt;li&gt;"Overtime for salaried workers is almost always followed by an equal period of compensatory 'undertime' while the workers catch up with their lives."&lt;/li&gt;&lt;li&gt;"Workaholics will put in uncompensated overtime, working extravagant hours, though perhaps with declining effectiveness."&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Chapter 4: Quality - If time persists&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"In the workplace, the major arouser of emotions is threatened self-esteem. Any steps you take to jeopardise the quality of the product is likely to set the emotions of staff against you."&lt;/li&gt;&lt;li&gt;"The minimum that will satisfy them is more or less the best quality they have achieved in the past."&lt;/li&gt;&lt;li&gt;"Allowing the standard of quality to be set by the buyer, rather than the builder, is what we call 'the flight from excellence'."&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Chapter 5: Parkinson's Law revisited&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"Work expands to fill the time allocated to it. This almost certainly doesn't apply to your people."&lt;/li&gt;&lt;li&gt;"The reasons that some people don't perform are lack of competence, lack of confidence, and lack of affiliation with others on the project and the project goals."&lt;/li&gt;&lt;li&gt;"When leaning on someone is the only option, the manager is the last person to do the leaning, it works far better when the message comes from the team."&lt;/li&gt;&lt;li&gt;"The systems analyst tends to be a better estimator than either the programmer or supervisor."&lt;/li&gt;&lt;li&gt;"Projects on which the boss applies no schedule pressure whatsoever had the highest productivity of all."&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Chapter 6: Laetrile&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"People who are desperate enough don't look very hard at the evidence."&lt;/li&gt;&lt;li&gt;"Easy non-solutions are often more attractive than hard solutions."&lt;/li&gt;&lt;li&gt;"Seven false hopes of software management."&lt;/li&gt;&lt;li&gt;"Leaning on people is counter productive and installing the latest technological doodah won't help either, then what is the manager supposed to do? The managers function is not to make people work, but to make it possible for people to do work."&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-969389676946649648?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/969389676946649648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=969389676946649648&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/969389676946649648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/969389676946649648'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/peopleware-part-1-managing-human.html' title='Peopleware - Part 1 - Managing the Human Resource'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7634325039341806772</id><published>2010-05-02T22:06:00.001+01:00</published><updated>2010-05-02T22:08:21.962+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>VS2010 Debugging BreakPoints, DataTips, Import/Export</title><content type='html'>Some great tips from &lt;a href="http://weblogs.asp.net/scottgu"&gt;ScottGu&lt;/a&gt; to improve debugging productivity in VS2010...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/04/21/vs-2010-debugger-improvements-breakpoints-datatips-import-export.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2010/04/21/vs-2010-debugger-improvements-breakpoints-datatips-import-export.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-7634325039341806772?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7634325039341806772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7634325039341806772&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7634325039341806772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7634325039341806772'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/vs2010-debugging-breakpoints-datatips.html' title='VS2010 Debugging BreakPoints, DataTips, Import/Export'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-4258402543586614185</id><published>2010-05-02T20:40:00.002+01:00</published><updated>2010-05-02T20:47:46.457+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns + Principles'/><title type='text'>Dependency Structure Matrix (DSM)</title><content type='html'>&lt;a href="http://erik.doernenburg.com"&gt;Erik Dörnenburg's&lt;/a&gt; post on &lt;a href="http://erik.doernenburg.com/2010/04/dependency-structure-matrix/"&gt;DSM's&lt;/a&gt; led me towards &lt;a href="http://tcdev.free.fr"&gt;Tom Carter's DSM plugin for .NET Reflector&lt;/a&gt;. A nice tool for analysing the dependencies and get remind you of the coupling and cohesion needs in your project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-4258402543586614185?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/4258402543586614185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=4258402543586614185&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4258402543586614185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/4258402543586614185'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/05/dependency-structure-matrix-dsm.html' title='Dependency Structure Matrix (DSM)'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-6586850880102544291</id><published>2010-04-28T09:46:00.001+01:00</published><updated>2010-04-28T09:47:51.091+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ClickOnce'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Add ClickOne Application to Startup</title><content type='html'>After trying out several examples this one seemed to work best for us:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.brokenwire.net/bw/Programming/116/run-clickonce-app-on-startup"&gt;http://www.brokenwire.net/bw/Programming/116/run-clickonce-app-on-startup&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-6586850880102544291?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/6586850880102544291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=6586850880102544291&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6586850880102544291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6586850880102544291'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/04/add-clickone-application-to-startup.html' title='Add ClickOne Application to Startup'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-8554515426068337763</id><published>2010-04-24T11:33:00.001+01:00</published><updated>2010-04-24T11:35:48.022+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Recursively Delete SVN Directories</title><content type='html'>Just made use of this handy script to recurse a folder and sub-folders deleting the '_svn' folders:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;for /d /r . %d in (_svn) do @if exist &amp;quot;%d&amp;quot; rd /s/q &amp;quot;%d&amp;quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Source: &lt;a href="http://stackoverflow.com/questions/521382/command-line-tool-to-delete-folder-with-a-specified-name-recursively-in-windows"&gt;http://stackoverflow.com/questions/521382/command-line-tool-to-delete-folder-with-a-specified-name-recursively-in-windows&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-8554515426068337763?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/8554515426068337763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=8554515426068337763&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8554515426068337763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/8554515426068337763'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/04/recursively-delete-svn-directories.html' title='Recursively Delete SVN Directories'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-2215758411860793843</id><published>2010-04-23T12:32:00.003+01:00</published><updated>2010-04-23T12:35:33.276+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>Visual Guide to NoSQL Systems</title><content type='html'>Found this information article &lt;a href="http://blog.nahurst.com/visual-guide-to-nosql-systems"&gt;here&lt;/a&gt; on NoSQL systems. Includes this nice diagram:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_YHz61vBBh7E/S9GFufXRmEI/AAAAAAAABa4/xOhgWlCUAGM/s1600/media_httpfarm5static_mevIk_png_scaled1000.png"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 400px; FLOAT: left; HEIGHT: 300px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5463294856716720194" border="0" alt="" src="http://2.bp.blogspot.com/_YHz61vBBh7E/S9GFufXRmEI/AAAAAAAABa4/xOhgWlCUAGM/s400/media_httpfarm5static_mevIk_png_scaled1000.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-2215758411860793843?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/2215758411860793843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=2215758411860793843&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2215758411860793843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2215758411860793843'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/04/visual-guide-to-nosql-systems.html' title='Visual Guide to NoSQL Systems'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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/_YHz61vBBh7E/S9GFufXRmEI/AAAAAAAABa4/xOhgWlCUAGM/s72-c/media_httpfarm5static_mevIk_png_scaled1000.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1485384044357211563</id><published>2010-04-19T13:12:00.003+01:00</published><updated>2010-04-19T13:14:06.052+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WatiN'/><title type='text'>WatiN: Confirmation Dialog Handler</title><content type='html'>An example of using the ConfirmDialogHandler:&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;using WatiN.Core;&lt;br /&gt;using WatiN.Core.DialogHandlers;&lt;br /&gt;&lt;br /&gt;[TestMethod()]&lt;br /&gt;public void ConfirmOKTest()&lt;br /&gt;{&lt;br /&gt;    using (IE ie = new IE("http://localhost/confirmtest.htm"))&lt;br /&gt;    {&lt;br /&gt;        ConfirmDialogHandler handler = new ConfirmDialogHandler();&lt;br /&gt;        using (new UseDialogOnce(ie.DialogWatcher, handler))&lt;br /&gt;        {&lt;br /&gt;            ie.Button("myButton1").ClickNoWait();&lt;br /&gt;            handler.WaitUntilExists();&lt;br /&gt;            handler.OKButton.Click();&lt;br /&gt;        }&lt;br /&gt;        ie.WaitForComplete();&lt;br /&gt;        Assert.AreEqual("Clicked OK", ie.Button("myButton1").Text);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Source: &lt;a href="http://www.codeproject.com/KB/testing/WatiNConfirmDialogs.aspx"&gt;http://www.codeproject.com/KB/testing/WatiNConfirmDialogs.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1485384044357211563?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1485384044357211563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1485384044357211563&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1485384044357211563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1485384044357211563'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/04/watin-confirmation-dialog-handler.html' title='WatiN: Confirmation Dialog Handler'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-7868587172362647982</id><published>2010-04-14T16:42:00.002+01:00</published><updated>2010-06-08T15:51:56.009+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS 7.5'/><title type='text'>IIS 7.5 - Appcmd Script to Relocate INETPUB</title><content type='html'>A handy script to relocate the INETPUB folder from the C drive:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/sites -siteDefaults.traceFailedRequestsLogging.directory:"E:\Inetpub\logs\FailedReqLogFiles"&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/sites -siteDefaults.logfile.directory:"E:\Inetpub\logs\logfiles"&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/log -centralBinaryLogFile.directory:"E:\Inetpub\logs\logfiles"&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/log -centralW3CLogFile.directory:"E:\Inetpub\logs\logfiles"&lt;br /&gt;reg add HKLM\System\CurrentControlSet\Services\WAS\Parameters /v ConfigIsolationPath /t REG_SZ /d E:\Inetpub\temp\appPools&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:system.applicationhost/configHistory -path:E:\Inetpub\history&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:system.webServer/asp -cache.disktemplateCacheDirectory:"E:\Inetpub\temp\ASP Compiled Templates"&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:system.webServer/httpCompression -directory:"E:\Inetpub\temp\IIS Temporary Compressed Files"&lt;br /&gt;%windir%\system32\inetsrv\appcmd set vdir "Default Web Site/" -physicalPath:E:\Inetpub\wwwroot&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='401'].prefixLanguageFilePath:E:\Inetpub\custerr&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='403'].prefixLanguageFilePath:E:\Inetpub\custerr&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='404'].prefixLanguageFilePath:E:\Inetpub\custerr&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='405'].prefixLanguageFilePath:E:\Inetpub\custerr&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='406'].prefixLanguageFilePath:E:\Inetpub\custerr&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='412'].prefixLanguageFilePath:E:\Inetpub\custerr&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='500'].prefixLanguageFilePath:E:\Inetpub\custerr&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='501'].prefixLanguageFilePath:E:\Inetpub\custerr&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='502'].prefixLanguageFilePath:E:\Inetpub\custerr&lt;br /&gt;reg add HKLM\Software\Microsoft\inetstp /v PathWWWRoot /t REG_SZ /d E:\Inetpub\wwwroot&lt;br /&gt;reg add HKLM\Software\Microsoft\inetstp /v PathFTPRoot /t REG_SZ /d E:\Inetpub\ftproot&lt;br /&gt;xcopy c:\Inetpub E:\Inetpub /E /O /I&lt;br /&gt;REM Also Enable Compression&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config /section:urlCompression /doDynamicCompression:True&lt;br /&gt;%windir%\system32\inetsrv\appcmd set config /section:urlCompression /doStaticCompression:True&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Source: &lt;a href="http://blogs.iis.net/thomad/archive/2008/02/10/moving-the-iis7-inetpub-directory-to-a-different-drive.aspx"&gt;http://blogs.iis.net/thomad/archive/2008/02/10/moving-the-iis7-inetpub-directory-to-a-different-drive.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-7868587172362647982?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/7868587172362647982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=7868587172362647982&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7868587172362647982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/7868587172362647982'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/04/iis-75-appcmd-script-to-relocate.html' title='IIS 7.5 - Appcmd Script to Relocate INETPUB'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-6997753525480867528</id><published>2010-04-05T16:03:00.001+01:00</published><updated>2010-04-05T16:04:43.731+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Slot Machine Tabs</title><content type='html'>A nice downloadable example of 'slot machine' tabs using jQuery and CSS: &lt;a href="http://css-tricks.com/slot-machine-tabs/"&gt;http://css-tricks.com/slot-machine-tabs/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-6997753525480867528?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/6997753525480867528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=6997753525480867528&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6997753525480867528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6997753525480867528'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/04/slot-machine-tabs.html' title='Slot Machine Tabs'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-6730704595694967616</id><published>2010-04-05T10:36:00.002+01:00</published><updated>2010-04-05T10:38:43.635+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC 2'/><title type='text'>Validation in ASP.NET MVC 2</title><content type='html'>ScottGu's blog post on this subject serves as an excellent introduction:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-6730704595694967616?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/6730704595694967616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=6730704595694967616&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6730704595694967616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/6730704595694967616'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/04/validation-in-aspnet-mvc-2.html' title='Validation in ASP.NET MVC 2'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-1807803874273443543</id><published>2010-03-31T11:18:00.000+01:00</published><updated>2010-03-31T11:19:19.446+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>More runas examples</title><content type='html'>&lt;strong&gt;Computer Management with administrative credentials&lt;/strong&gt;&lt;br /&gt;runas /user: ComputerName \administrator "mmc %windir%\system32\compmgmt.msc"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Active Directory Users and Computers with domain administrative credentials&lt;/strong&gt;&lt;br /&gt;runas /user: DomainName \administrator "mmc %windir%\system32\dsa.msc"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Active Directory Users and Computers in another forest&lt;/strong&gt;&lt;br /&gt;runas /netonly /user: DomainName \ UserName "mmc %windir%\system32\dsa.msc"&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://technet.microsoft.com/en-us/library/cc781769(WS.10).aspx"&gt;http://technet.microsoft.com/en-us/library/cc781769(WS.10).aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-1807803874273443543?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/1807803874273443543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=1807803874273443543&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1807803874273443543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/1807803874273443543'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/03/more-runas-examples.html' title='More runas examples'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry><entry><id>tag:blogger.com,1999:blog-3354578112415392473.post-2678053235707479927</id><published>2010-03-30T17:45:00.003+01:00</published><updated>2010-03-30T17:50:13.256+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Create a Setup Project for a Windows Service</title><content type='html'>With a Windows Service created in VS:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;On the File menu, point to Add Project, and then choose New Project. &lt;/li&gt;&lt;li&gt;In the Project Types pane, select the Setup and Deployment Projects folder. &lt;/li&gt;&lt;li&gt;In the Templates pane, select Setup Project.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Add the Windows Service exe to the setup project:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;In Solution Explorer, right-click Setup, point to Add, then choose Project Output. The Add Project Output Group dialog box appears. &lt;/li&gt;&lt;li&gt;ServiceName is selected in the Project box. &lt;/li&gt;&lt;li&gt;From the list box, select Primary Output, and click OK. &lt;/li&gt;&lt;li&gt;A project item for the primary output of ServiceName is added to the setup project. Now add a custom action to install the ServiceName.exe file.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Add a custom action to the setup project:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;In Solution Explorer, right-click the setup project, point to View, then choose Custom Actions. The Custom Actions editor appears.&lt;/li&gt;&lt;li&gt;In the Custom Actions editor, right-click the Custom Actions node and choose Add Custom Action. The Select Item in Project dialog box appears. &lt;/li&gt;&lt;li&gt;Double-click the application folder in the list box to open it, select primary output from ServiceName (Active), and click OK. The primary output is added to all four nodes of the custom actions: Install, Commit, Rollback, and Uninstall.&lt;/li&gt;&lt;li&gt;Build the setup project. &lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3354578112415392473-2678053235707479927?l=gthill.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gthill.blogspot.com/feeds/2678053235707479927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3354578112415392473&amp;postID=2678053235707479927&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2678053235707479927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3354578112415392473/posts/default/2678053235707479927'/><link rel='alternate' type='text/html' href='http://gthill.blogspot.com/2010/03/create-setup-project-for-windows.html' title='Create a Setup Project for a Windows Service'/><author><name>Gareth Thomas Hill</name><uri>http://www.blogger.com/profile/13811920704142646474</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></entry></feed>
