<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dev:ices</title>
	<atom:link href="http://www.mindthe.net/devices/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mindthe.net/devices</link>
	<description>Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all. - Douglas Adams</description>
	<lastBuildDate>Wed, 22 Feb 2012 11:13:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Getting Windows Git Bash to Hitch</title>
		<link>http://www.mindthe.net/devices/2012/02/22/getting-windows-git-bash-to-hitch/</link>
		<comments>http://www.mindthe.net/devices/2012/02/22/getting-windows-git-bash-to-hitch/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 11:13:19 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Comment]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=283</guid>
		<description><![CDATA[Hitch is a great little Ruby program that manipulates the Git author settings to properly attribute pair programming work]]></description>
			<content:encoded><![CDATA[<p>On a Windows 7 machine that already had Windows Git bash version 1.7.9-preview20120201 on it, I wanted to add &#8216;hitch&#8217;. <a title="Hitch" href="https://github.com/therubymug/hitch">Hitch</a> is a great little Ruby program that manipulates the Git author settings to properly attribute pair programming work. Rather than a commit having a single author, Hitch creates a unique email address from a known base email address and adding the pair names after a + symbol.</p>
<p>This is useful as when we push code up to <a href="http://www.github.com">GitHub</a> it becomes clear which pair have been working on a task. You can also create a <a href="http://www.gravatar.com">Gravatar</a> for the unique concatenated email address so the pair combination can have their own logo too.</p>
<p>The installation is simple: gem install ruby. The Windows machine didn&#8217;t have Ruby on it so I went to <a href="http://rubyinstaller.org/downloads/">Ruby Installers for Windows</a> and downloaded v1.9.3-p125. make sure you tick the box in the install wizard to add the Ruby executables to your PATH. When Git Bash starts it&#8217;s loaded with the Windows PATH settings anyway so it should be able to find Ruby to install hitch.</p>
<p>Hitch itself is a breeze to setup using your GitHub usernames.<br />
<code>hitch username1 username2</code></p>
<p>Hitch will ask if you want to add the usernames to its local hitch_pairs files to save you entering their full name again. Enter their full name and you&#8217;re good to go. Now each subsequent git commit will have the correct author information. Pair programming is great and Hitch allows both members of the pair to have their work attributed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2012/02/22/getting-windows-git-bash-to-hitch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foreign Raspberries</title>
		<link>http://www.mindthe.net/devices/2012/01/11/foreign-raspberries/</link>
		<comments>http://www.mindthe.net/devices/2012/01/11/foreign-raspberries/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 13:06:32 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Comment]]></category>
		<category><![CDATA[petition]]></category>
		<category><![CDATA[raspberry pi]]></category>
		<category><![CDATA[tax]]></category>
		<category><![CDATA[uk]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=280</guid>
		<description><![CDATA[<p>The exciting <a title="Raspberry Pi" href="http://www.raspberrypi.org/">Raspberry Pi</a> project is nearing fruition but it seems <a href="http://www.raspberrypi.org/">their attempts to boost the UK economy by getting the boards made over here</a> has been thwarted by lead times and an insane tax law.</p> <p>It seems UK manufacturers end up paying tax on components, but if they get the [...]]]></description>
			<content:encoded><![CDATA[<p>The exciting <a title="Raspberry Pi" href="http://www.raspberrypi.org/">Raspberry Pi</a> project is nearing fruition but it seems <a href="http://www.raspberrypi.org/">their attempts to boost the UK economy by getting the boards made over here</a> has been thwarted by lead times and an insane tax law.</p>
<p>It seems UK manufacturers end up paying tax on components, but if they get the boards made overseas and then shipped over then that&#8217;s ok because they&#8217;re completed products rather than raw materials. Bottom line is that this insanity means that foreign outsourcing of manufacturing gets even more attractive.</p>
<p>So in these times of austerity it would seem the sensible thing to do to support UK manufacturing by lobbying for a change in those tax laws. We have a lot of manufacturing talent in the UK and we should be supporting it.</p>
<p>If you want to <a href="http://submissions.epetitions.direct.gov.uk/petitions/27158">support a lobby on this issue there&#8217;s an e-Petition been set up to register your support</a> at http://submissions.epetitions.direct.gov.uk/petitions/27158</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2012/01/11/foreign-raspberries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Immersive Pomodoro</title>
		<link>http://www.mindthe.net/devices/2011/07/07/immersive-pomodoro/</link>
		<comments>http://www.mindthe.net/devices/2011/07/07/immersive-pomodoro/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 11:59:58 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[XCode]]></category>
		<category><![CDATA[GChat]]></category>
		<category><![CDATA[Google Calendar]]></category>
		<category><![CDATA[iCal]]></category>
		<category><![CDATA[Pomodoro]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=273</guid>
		<description><![CDATA[<p>Some of my colleagues have been applying the <a title="Pomodoro Technique" href="http://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro technique</a> to their pair programming of late, so I thought I&#8217;d give it a try. I&#8217;m trialling a combination of tools which now integrates my Pomodoros more with my daily working life and I&#8217;ll set them out in this post.</p> <p>I&#8217;m currently coding [...]]]></description>
			<content:encoded><![CDATA[<p>Some of my colleagues have been applying the <a title="Pomodoro Technique" href="http://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro technique</a> to their pair programming of late, so I thought I&#8217;d give it a try. I&#8217;m trialling a combination of tools which now integrates my Pomodoros more with my daily working life and I&#8217;ll set them out in this post.<span id="more-273"></span></p>
<p>I&#8217;m currently coding in XCode on a Mac so I discovered the <a title="Pomodoro" href="http://pomodoro.ugolandini.com/">Pomodoro app</a> (available via AppStore or source code) which adds a countdown timer to my status bar at the top. It&#8217;s got a range of good features to it that brings it well above just being a glorified egg timer. The two features I&#8217;m liking the most are the GTD (Getting Things Done) and Calendar integration.</p>
<p>In the GTD section, the Pomodoro app sets my iChat status announcing my current Pomodoro and what time I&#8217;ll be done by. It automatically marks me as Busy during my Pomodoro and sets me back available afterwards and marking me as on one of my rest breaks. We&#8217;re using GChat more at work now so this is perfect because it can hopefully guide people who want to contact me on to the best time to do so.</p>
<p>In the Calendar section, I&#8217;ve set it up to log my Pomodoros to iCal. I&#8217;ve linked iCal to Google Calendar following <a title="Get started with CalDAV" href="http://www.google.com/support/calendar/bin/answer.py?answer=99358#ical">a guide from Google&#8217;s help pages</a> on how to use CalDAV to sync the two. I changed my Google Calendar&#8217;s notification settings to stop adding Email/Popup notifications for each Event by default. Before I&#8217;d done this iCal was alerting me to Pomodoros I&#8217;d already completed which was pointless.</p>
<p>So I can now embark on a fresh Pomodoro with a simple click or keypress, enter the description for the Pomodoro and know that my colleagues can see my current status and know that I&#8217;m tracking my own Pomodoro progress in my calendar at the same time.</p>
<p>I&#8217;ll let you know how the experiment continues, but at the moment it&#8217;s proving a positive way of focussing intently for a fixed period. The integration from using the Pomodoro app with iChat and iCal does provide a very immersive Pomodoro experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2011/07/07/immersive-pomodoro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>12 steps to using GitHub with XCode 4</title>
		<link>http://www.mindthe.net/devices/2011/04/28/12-steps-to-using-github-with-xcode-4/</link>
		<comments>http://www.mindthe.net/devices/2011/04/28/12-steps-to-using-github-with-xcode-4/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 09:35:28 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[XCode]]></category>
		<category><![CDATA[GitHub]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=267</guid>
		<description><![CDATA[The Git integration in XCode 4 is very welcome however it seems to be a bit flaky when it comes to dealing with remote repositories. In this post, I list the 12 steps I've attempted to work with GitHub with new XCode projects.]]></description>
			<content:encoded><![CDATA[<p>The Git integration in XCode 4 is very welcome however it seems to be a bit flaky when it comes to dealing with remote repositories. For clarity I&#8217;m using Mac OS X version 10.6.7 and XCode 4.0.2 (4A2002a).</p>
<p>If I create a new XCode 4 Project and accept the option to create a local Git repository, all is well. I can commit locally and that&#8217;s great.</p>
<p>When I want to push the new project to GitHub I want to add a remote repository and push my local changes up to GitHub. I can add a GitHub repository to XCode 4 as a new Repository in the Organizer window but there&#8217;s no method of setting it as a remote repository for my existing project.</p>
<p>So instead here&#8217;s the 12 steps that I followed to get GitHub to work with a new XCode 4 project</p>
<p><span id="more-267"></span></p>
<ol>
<li>Launch XCode 4</li>
<li>Select the &#8216;Connect to a repository&#8217; option from the &#8216;Welcome to XCode&#8217; dialog.</li>
<li>Paste in your GitHub SSH URL in the Location text box. This can be found from your GitHub repository&#8217;s Source page. e.g. git@github.com:<em>&lt;organisation&gt;</em>/<em>&lt;repository&gt;</em>.git</li>
<li>Click Next and then give the repository a name (e.g. <em>RepositoryName</em>) and click Clone.</li>
<li>Pick a directory to clone your GitHub repository into (even if your repository is currently empty).</li>
<li>The 1st attempt appears to fail even though contents are downloaded. Click &#8216;<em>Try Again</em>&#8216; and XCode 4 is happy and shows a green tick icon.</li>
<li>Close the dialog. There is now a new Repository defined in the Organizer window (Shift+Cmd+2) with its origin set to the GitHub remote SSH URL.</li>
<li>Create a New Project within the directory you just cloned into but <strong>do not</strong> tick the &#8216;<em>Create local git repository for this project</em>&#8216; option.</li>
<li>Do an initial commit to the local Git repository. You can either choose File -&gt; Source Control -&gt; Commit or press Option+Cmd+C. Enter a commit message and click &#8216;Commit&#8217;.</li>
<li>Now try  to push your local changes up to GitHub. From the application menu, select File -&gt; Source Control -&gt; Push. XCode 4 fails with &#8216;<em>The operation could not be performed because access to the repository &lt;RepositoryName&gt; was denied. Check username and password</em>&#8216; (where RepositoryName is the name you entered earlier).</li>
<li>Try pushing again by selecting File -&gt; Source Control -&gt; Push and XCode 4 pops up the remote Repository dialog again. This time it has detected a remote Repository called <em>origin</em>. Next to it there&#8217;s a yellow ball and the message &#8216;<em>Authentication required</em>&#8216;.</li>
<li>Clicking &#8216;Push&#8217; again causes the remote Push to work.</li>
</ol>
<p>As XCode 4 has created a new Repository called &#8216;origin&#8217; to match the remote name, I&#8217;m not sure what&#8217;ll happen if you need to interact with more than one GitHub remote repository.</p>
<p>Another thing I&#8217;ve spotted is that the response messages back from GitHub with the checkin hash value and status message get reported in the XCode 4 Log navigator (Cmd+7) as Push failures, even though the Push is successful as far as GitHub is concerned.</p>
<p>I&#8217;m hoping that XCode 4 will have some patch work done to help improve this interaction with remote repositories in the near future. Apple are spot-on for encouraging users to check-in their work, it&#8217;d just be nicer to see a more collaborative focus on features rather than maybe assuming most iOS developers are sat on their own.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2011/04/28/12-steps-to-using-github-with-xcode-4/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Are your contacts portable?</title>
		<link>http://www.mindthe.net/devices/2011/03/24/are-your-contacts-portable/</link>
		<comments>http://www.mindthe.net/devices/2011/03/24/are-your-contacts-portable/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 13:31:59 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Open Standards]]></category>
		<category><![CDATA[Portable Contacts]]></category>
		<category><![CDATA[Contacts]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[POCO]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=249</guid>
		<description><![CDATA[<p><a href="http://www.flickr.com/photos/sidewalk_flying/2421382093/"></a></p> <p>With an increasing amount of technology to help you communicate, the job of keeping your multiple contact lists up-to-date across these devices and services has mainly fallen to you.</p> <p>Contact information lurks in many places and is often locked to serve one purpose. Whether it&#8217;s contact details in your mobile phone; on the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/sidewalk_flying/2421382093/"><img class="size-full wp-image-253  alignleft" title="Spare Office by sidewalk_flying (Flickr)" src="http://www.mindthe.net/devices/wp-content/uploads/rolodex.jpg" alt="Spare Office by sidewalk_flying (Flickr)" width="184" height="240" /></a></p>
<p>With an increasing amount of technology to help you communicate, the job of keeping your multiple contact lists up-to-date across these devices and services has mainly fallen to you.</p>
<p>Contact information lurks in many places and is often locked to serve one purpose. Whether it&#8217;s contact details in your mobile phone; on the address book in your email client at work or the list of friends you&#8217;ve built up on social media.</p>
<p>This post introduces <a id="aptureLink_OOZFVwLyeH" href="http://portablecontacts.net/">Portable Contacts</a> as a solution to getting access to these distinct collections of your contacts to avoid needing to duplicate them.</p>
<p><span id="more-249"></span></p>
<h2>Importing leads to duplication</h2>
<p>On-line services can often encourage you to import your contacts from other services so they&#8217;re available to use with their service. Making it easy for you to import contacts seems helpful as you can start to use your contacts in new ways. At the same time duplicating your contact information in yet another place means that the maintenance task to keep everything in sync increases. Importing contacts in multiple places can lead you to experience these services as separate &#8216;boxes&#8217; instead of being really interconnected on the Internet.</p>
<p>Portable Contacts is an <a id="aptureLink_MyWtvoxgVU" href="http://www.opensource.org/osr">open standard</a> which has a simple goal to</p>
<blockquote><p>&#8220;make it easier for developers to give their users a secure way to access the address books and friends lists they have built up all over the web&#8221; &#8211; portablecontacts.net</p></blockquote>
<p>Instead of forcing you to duplicate your contact information, Portable Contacts allows you to unlock your information and share it in a controlled and secure way. If your friends and family are stored in one place and your work contacts in another, if you could access them elsewhere via Portable Contacts then you only have to make edits in one place.</p>
<h2>A secure way to share</h2>
<p>A service that implements Portable Contacts uses <a id="aptureLink_upIHvSkYV9" href="http://en.wikipedia.org/wiki/OAuth">OAuth</a> to control access to any contact information to be shared. OAuth is increasingly used in services to allow 3rd party services to interact with them. <a id="aptureLink_eIabk3ThlI" href="http://twitter.com/">Twitter</a> uses OAuth to give you the choice of allowing other applications to &#8216;tweet&#8217; on your behalf. Sharing contacts with OAuth also stops you needing to share the security credentials to get access to your contacts. Usually websites that offer to import your contacts on your behalf will blatantly ask for your username and password details which, for the ease of use, users freely share.</p>
<h2>Easy to consume</h2>
<p>Portable Contacts shares information via HTTP operations and supplies the information in either JSON or XML formats to applications which want to use them. This approach is widely used in modern <a id="aptureLink_u6P9AUGAjZ" href="http://en.wikipedia.org/wiki/Application%20programming%20interface">APIs</a> and makes the contact data easy to consume in many programming languages.</p>
<p>The <a id="aptureLink_zsRkHVynEO" href="http://wiki.portablecontacts.net/w/page/17776143/Software-and-Services-using-Portable-Contacts">Portable Contacts&#8217; wiki page</a> shows some of the services using the open standard at the moment. Since the driving force behind Portable Contacts, <a id="aptureLink_j6Hn0BxbB0" href="http://josephsmarr.com/">Joseph Smarr</a>, now works for Google it&#8217;s no surprise that they have continued their support for <a id="aptureLink_XA9kmn1UnP" href="http://code.google.com/apis/contacts/docs/poco/1.0/developers_guide.html">exposing Google Contacts in this way</a>.</p>
<p>There are a few libraries to help developers integrate Portable Contacts in applications: a Java library called <a id="aptureLink_02uHHyHwlp" href="http://code.google.com/p/jpoco/">jpoco</a> and <a id="aptureLink_50HH4zUjlu" href="https://github.com/pelle/portablecontacts">a Ruby client</a> too.</p>
<h2>Sociable</h2>
<p>Another open standard, <a id="aptureLink_qUJib8QidO" href="http://www.opensocial.org/">OpenSocial</a>, is compatible with Portable Contacts. OpenSocial has <a id="aptureLink_C0CFxJDY9D" href="http://wiki.opensocial.org/index.php?title=Main_Page#Container_Information">been adopted by sites</a> like LinkedIn, MySpace, orkut, and Yahoo!. As Joseph explains on the Portable Contacts website:</p>
<blockquote><p>&#8220;The OpenSocial and Portable Contacts communities chose to wire-align our respective specs in order to maximize widespread adoption of a single API for accessing people data.&#8221; &#8211; Joseph Smarr</p></blockquote>
<p>Portable Contacts might not be widely known yet but the opportunities to access your contact data without duplicating it is increasing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2011/03/24/are-your-contacts-portable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1&amp;1 domain transfer status: &#8216;Domain Update Done&#8217;</title>
		<link>http://www.mindthe.net/devices/2011/02/16/11-domain-transfer-status-domain-update-done/</link>
		<comments>http://www.mindthe.net/devices/2011/02/16/11-domain-transfer-status-domain-update-done/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 09:15:33 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Comment]]></category>
		<category><![CDATA[1&1]]></category>
		<category><![CDATA[Domain transfer]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=244</guid>
		<description><![CDATA[<p>In the process of moving a .co.uk domain over to 1&#38;1 for someone this week, I encountered the undocumented status code of &#8216;Domain Update Done&#8217;.</p> <p>The domain had previously shown as &#8216;Ready&#8217; in the control panel and I was able to set the server and mailserver for them using 1&#38;1&#8242;s nameserver.</p> <p>The gotcha is that [...]]]></description>
			<content:encoded><![CDATA[<p>In the process of moving a .co.uk domain over to 1&amp;1 for someone this week, I encountered the undocumented status code of &#8216;Domain Update Done&#8217;.</p>
<p>The domain had previously shown as &#8216;Ready&#8217; in the control panel and I was able to set the server and mailserver for them using 1&amp;1&#8242;s nameserver.</p>
<p>The gotcha is that during the &#8216;Domain Update Done&#8217; status you can&#8217;t swap the nameserver settings. You can still get to change the A and MX records with 1&amp;1&#8242;s Nameserver but if you wanted to point it to an external nameserver you&#8217;ll have to wait until this status clears.</p>
<p>The official word I got from 1&amp;1 support says : &#8220;Domain Update Done status means that a domain is already on its last phase of propagation and normally, this will take 24-48 hours.&#8221;</p>
<p>So just be warned that if you want to change your initial settings when transferring a domain, you might get locked out while the domain is being finalised on your account.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2011/02/16/11-domain-transfer-status-domain-update-done/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Fixing MSDTC between two machines on different domains</title>
		<link>http://www.mindthe.net/devices/2010/12/06/fixing-msdtc-between-two-machines-on-different-domains/</link>
		<comments>http://www.mindthe.net/devices/2010/12/06/fixing-msdtc-between-two-machines-on-different-domains/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 17:18:59 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Comment]]></category>
		<category><![CDATA[COM+]]></category>
		<category><![CDATA[DTCPing]]></category>
		<category><![CDATA[DTCTester]]></category>
		<category><![CDATA[MSDTC]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=241</guid>
		<description><![CDATA[<p>I&#8217;ve been chasing problems with MSDTC today. We were trying to get one machines on a different domain to use MSDTC through COM+ to talk to a remote SQL Server on a different domain.</p> <p>Select / Read operations seemed to work fine but when it attempted to use an UPDATE method in a transaction, it [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been chasing problems with MSDTC today. We were trying to get one machines on a different domain to use MSDTC through COM+ to talk to a remote SQL Server on a different domain.</p>
<p>Select / Read operations seemed to work fine but when it attempted to use an UPDATE method in a transaction, it failed with an exception saying</p>
<pre>COM+ was unable to talk to the Microsoft Distributed
Transaction Coordinator (Exception from HRESULT: 0x8004E00F)</pre>
<p>The following information describes my eventual journey to success.</p>
<p><span id="more-241"></span></p>
<p>The first thing to try is DTCPing. I found a <a href="http://support.microsoft.com/kb/306843">Microsoft Knowledgebase article</a> that takes you through checking firewall permissions and checking the MSDTC ports. Get this working from both client and server ends first.</p>
<p>The second utility to try from Microsoft is DTCTester. There&#8217;s another useful <a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q293799">Microsoft Knowledgebase article</a> which takes you through how to run it. One thing I had to do before running this was create an ODBC System DSN entry from the client computer to the server for DTCTester to use. This isn&#8217;t how I was connecting to the SQL Server but was necessary to test.</p>
<p>In the midst of all of this the Distributed Transaction Service decided to crash and uninstall itself on the client machine. If this happens try the following on a command line prompt:</p>
<ul>
<li>msdtc -uninstall</li>
<li>msdtc -install</li>
<li>msdtc -resetlog</li>
</ul>
<p>Check that the DTC service has been reinstalled and has the Network Service permission.</p>
<p>Running DTCTester.exe resulted in</p>
<pre>tablename= #dtc29131
Creating Temp Table for Testing: #dtc29131
Warning: No Columns in Result Set From Executing: 'create table #dtc29131 (ival
int)'
Initializing DTC
Beginning DTC Transaction
Enlisting Connection in Transaction
Error:
SQLSTATE=25S12,Native error=-2147168242,msg='[Microsoft][ODBC SQL Server Driver]
Distributed transaction error'
Error:
SQLSTATE=24000,Native error=0,msg=[Microsoft][ODBC SQL Server Driver]Invalid cur
sor state
Typical Errors in DTC Output When
a.  Firewall Has Ports Closed
-OR-
b.  Bad WINS/DNS entries
-OR-
c.  Misconfigured network
-OR-
d.  Misconfigured SQL Server machine that has multiple netcards.
Aborting DTC Transaction
Releasing DTC Interface Pointers
Successfully Released pTransaction Pointer.</pre>
<p>There were several other investigation paths which bore no fruit so I&#8217;ll just cut to the solution; one of which included creating a VPN tunnel from client to server.</p>
<p>I <a href="http://www.developmentnow.com/g/118_2005_4_0_0_510973/DTC-Fails.htm">found a blog post</a> after searching for the keywords &#8220;dtctester sqlstate=25S12&#8243;. One of the solutions was to turn the MSDTC security down to requring No Authentication instead of Mutual Authentication Required. This makes sense as the fact both client and server computers were on different domains, I suspect authentication requests from either end were failing because of this.</p>
<ul>
<li>Open Component Services (Administrative Tools -&gt; Component Services)</li>
<li>Expand the Component Services tree and the Computers tree to see &#8216;My Computer&#8217;</li>
<li>Right click on My Computer and select Properties</li>
<li>Select the MSDTC tab</li>
<li>Click on &#8216;Security Configuration&#8217; in the bottom left hand corner Transaction Configuration section.</li>
<li>Change the Transaction Manager Communication from Mutual Authentication Required to No Authentication Required.</li>
<li>Click OK out of all dialogs</li>
</ul>
<p>Running DTCTester again now results in the following:</p>
<pre>tablename= #dtc6875
Creating Temp Table for Testing: #dtc6875
Warning: No Columns in Result Set From Executing: 'create table #dtc6875 (ival i
nt)'
Initializing DTC
Beginning DTC Transaction
Enlisting Connection in Transaction
Executing SQL Statement in DTC Transaction
Inserting into Temp...insert into #dtc6875 values (1)
Warning: No Columns in Result Set From Executing: 'insert into #dtc6875 values (
1) '
Verifying Insert into Temp...select * from #dtc6875 (should be 1): 1
Press enter to commit transaction.
Commiting DTC Transaction
Releasing DTC Interface Pointers
Successfully Released pTransaction Pointer.
Disconnecting from Database and Cleaning up Handles</pre>
<p>The application that had previously failed now works and happiness has returned to the land of MSDTC and COM+ (as much as the land of COM+ can be happy!)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2010/12/06/fixing-msdtc-between-two-machines-on-different-domains/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Contacts throws a gauntlet at Facebook?</title>
		<link>http://www.mindthe.net/devices/2010/11/08/google-contacts-throws-a-gauntlet-at-facebook/</link>
		<comments>http://www.mindthe.net/devices/2010/11/08/google-contacts-throws-a-gauntlet-at-facebook/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 09:26:48 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Comment]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Contacts]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=238</guid>
		<description><![CDATA[Google have changed their terms of service on their Contacts API in a seemingly simple way, but with hopefully bigger consequences. It might force Facebook to open the doors on external access to the data we choose to store there.]]></description>
			<content:encoded><![CDATA[<p>Given the size Facebook has grown to, it has an obvious &#8216;elephant in the corner&#8217; for those willing to step back from their time-line for a minute.  Those users who are only interested in friends, photos and now location-based checkins too might miss the fact that Facebook is data-mining on a grand scale.</p>
<p>The debate about the public visibility of your data has grabbed the media&#8217;s attention. What&#8217;s given less coverage is the missing ability for you to easily use and share the data you&#8217;ve chosen to store with Facebook elsewhere on the internet.</p>
<p>Google have recently changed their terms of service on their Contacts API in a seemingly simple way, but with hopefully bigger consequences. <a id="aptureLink_hpZ7UFEQm3" href="http://www.crunchbase.com/product/gigaom">GigaOm</a> summised in <a id="aptureLink_DULZZLwYRU" href="http://gigaom.com/2010/11/05/nice-move-google-what-took-you-so-long/">their article about this</a> by saying &#8220;Third-party apps and services can’t pull data from Google without allowing Google to do the same with their data&#8221;.</p>
<p>We shall have to see whether linking with Google Contacts in Gmail etc. to find new friends to connect to on Facebook is enough to force Facebook to apply a can-opener to their own APIs.</p>
<p>Thanks to <a id="aptureLink_t2Aujj0IBs" href="http://twitter.com/adambird">Adam Bird</a> for sending me a link to the GigaOm story.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2010/11/08/google-contacts-throws-a-gauntlet-at-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shutting down log4net repositories</title>
		<link>http://www.mindthe.net/devices/2010/10/18/shutting-down-log4net-repositories/</link>
		<comments>http://www.mindthe.net/devices/2010/10/18/shutting-down-log4net-repositories/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 09:22:36 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Comment]]></category>
		<category><![CDATA[gibraltar]]></category>
		<category><![CDATA[log4net]]></category>
		<category><![CDATA[logging]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=228</guid>
		<description><![CDATA[Gibraltar Software provides a richer feedback experience if you're used to using log4net; just remember to tidy up after yourself. ]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been learning and evaluating the <a id="aptureLink_8A6JG0503S" href="http://www.youtube.com/watch?v=oK1g-jkBiws">Gibraltar &#8216;Runtime intelligence&#8217; &amp; logging application</a> recently. If you&#8217;re already using <a id="aptureLink_nUqrDzLjoE" href="http://en.wikipedia.org/wiki/Apache%20Log4net">log4net</a>, there&#8217;s a very low impact route to adopting its many benefits by using their simple <a id="aptureLink_VIM2HH2DSh" href="http://www.gibraltarsoftware.com/See/Log4Net.aspx">Gibraltar Appender</a>.</p>
<p>In knocking up a quick sample application to test, I had setup and configured my Log4Net logger:</p>
<pre>public class Program
{
  private static readonly ILog Log = 
    LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);</pre>
<pre>  static int Main(string[] args)
  {
    if (!LogManager.GetRepository().Configured)
    {
      XmlConfigurator.Configure();
    }</pre>
<p>The simple application went on to output some simple log lines to test using the Gibraltar appender. All was fine, except this simple console application appeared to hang on exit. I quit the running application and Gibraltar dutifully announced that my session had Crashed.</p>
<p>A bit of headscratching later made me realise that I needed to be a better Log4Net citizen in my sample application. I had omitted the line:</p>
<pre>Log.Logger.Repository.Shutdown();</pre>
<p>Now my code properly stopped its logging activities before the program exited and Gibraltar was able to report successfully. The Log4Net RollingFileAppender or ConsoleAppenders don&#8217;t complain like this on program exit if the repository isn&#8217;t shutdown first but it does makes sense to tidy up after yourself rather than relying on the garbage collector.</p>
<p>I&#8217;ll write more about my positive experiences of Gibraltar in another post, but just wanted to share this in case any early adopters faced the same &#8216;facepalm&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2010/10/18/shutting-down-log4net-repositories/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TDD, Visual Studio 2010 &amp; BadImageFormatException</title>
		<link>http://www.mindthe.net/devices/2010/10/07/badimageformatexception/</link>
		<comments>http://www.mindthe.net/devices/2010/10/07/badimageformatexception/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 17:07:31 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Comment]]></category>
		<category><![CDATA[BadImageFormatException]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">http://www.mindthe.net/devices/?p=219</guid>
		<description><![CDATA[How to solve a BadImageFormatException when your Visual Studio 2010 solution has a console application and class libraries and you're running on a 64-bit machine. ]]></description>
			<content:encoded><![CDATA[<p>Just had a very strange run-in with Visual Studio 2010 throwing a BadImageFormatException. Just to set the scene I&#8217;ve got Visual Studio 2010 running on a Windows XP 64-bit machine.</p>
<p>My solution has a Console Application and a few Class Libraries; one of which is for Integration Tests using <a id="aptureLink_XBF2wQ0sb5" href="http://en.wikipedia.org/wiki/Behavior%20Driven%20Development">StoryQ</a> and another which is for my unit tests classes.</p>
<p>Running my Console application works fine on its own, but as soon as I either ran the Unit Tests or got Resharper to run my Integration Tests, I was hitting a BadImageFormatException. It could not load my console application (or one of its dependencies).</p>
<p>A bit of blog searching found an forum thread which talks about how a <a id="aptureLink_ds4RjDYmIb" href="http://connect.microsoft.com/VisualStudio/feedback/details/455103/new-c-console-application-targets-x86-by-default">new c# console application targets x86 by default</a>. I think the combination of it attempting to run my console application in x86 and my test libraries on the 64-bit environment was causing a battle of wills.</p>
<p>The solution is to go into your console application Properties and switch to the Build tab. Then make sure that for both Debug and Release configurations that your Platform Target is set to &#8220;Any CPU&#8221; rather than &#8220;x86&#8243;.</p>
<p>This then allows your TDD to continue unchallenged by assumed defaults and the use of a 64-bit OS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindthe.net/devices/2010/10/07/badimageformatexception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

