<?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>Tigraine &#187; Tools</title>
	<atom:link href="http://www.tigraine.at/category/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tigraine.at</link>
	<description>Daniel Hoelbling talks about .NET</description>
	<lastBuildDate>Mon, 06 Sep 2010 20:47:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Using git from Powershell just got easier: Posh-git</title>
		<link>http://www.tigraine.at/2010/09/01/using-git-from-powershell-just-got-easier-posh-git/</link>
		<comments>http://www.tigraine.at/2010/09/01/using-git-from-powershell-just-got-easier-posh-git/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 15:23:09 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/2010/09/01/using-git-from-powershell-just-got-easier-posh-git/</guid>
		<description><![CDATA[Whenever someone asks me at the end of my git presentation about what tools to use with git my answer was always be the same:
Learn to use the commandline. It’s by far the most convenient way to get stuff done. That’s the way git was intended to be used, and with msysgit and Powershell you [...]]]></description>
			<content:encoded><![CDATA[<p>Whenever someone asks me at the end of my <a href="http://docs.com/17U1">git presentation</a> about what tools to use with git my answer was always be the same:</p>
<p>Learn to use the commandline. It’s by far the most convenient way to get stuff done. That’s the way git was intended to be used, and with msysgit and Powershell you get a pretty powerful shell to do your stuff. I work exclusively from the commandline, rarely using gitk to take a look at the history.   <br />Unfortunately the basic Windows commandline (cmd) is just awful and outdated. And while some people swear by the MinGW stuff, I loathe the Unix commandline. So Powershell was the only good way for me on Windows to use git. </p>
<p>Now, thanks to some great work from <a href="http://solutionizing.net/">Keith Dahlby</a>, <a href="http://www.markembling.info/">Jeremy Skinner</a> and <a href="http://www.jeremyskinner.co.uk/">Mark Embling</a> using git from Powershell just got a whole lot more comfortable with <a href="http://github.com/dahlbyk/posh-git">Posh-Git</a>.</p>
<p>Documentation is still a bit sparse, but Posh-Git at it’s core gives you two things: It modifies your Powershell prompt to display relevant git information (branch name and staged/unstaged changes) and adds tab-completion to all git commands. Tab completion also works on branches so you can even hit tab on a git checkout and it will auto-complete to a branch. Really really nice I have to say.</p>
<p>Here is how my git shell looks like now with Posh-Git:</p>
<p><a href="http://www.tigraine.at/wp-content/uploads/2010/09/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2010/09/image_thumb.png" width="498" height="81" /></a></p>
<p>Once you have changes it will display them also on the prompt:</p>
<p><a href="http://www.tigraine.at/wp-content/uploads/2010/09/image1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2010/09/image_thumb1.png" width="569" height="69" /></a></p>
<p>(Meaning: 1 new file, 1 deleted and 0 old ones changed)</p>
<p><strong>Installing</strong></p>
<p>Unfortunately not everyone is a Powershell buff like Keith and friends, so I had a bit of trouble finding out how to set up Posh-Git. Actually, it’s dead simple, but nobody told me: Just put all files from the <a href="http://github.com/dahlbyk/posh-git">Posh-Git repository</a> into the folder:</p>
<blockquote><p><em>C:\Users\&lt;username&gt;\WindowsPowerShell\</em></p>
</blockquote>
<p>And rename the file <em>profile.example.ps1</em> to <em>Microsoft.PowerShell_profile.ps1</em>. If you already had a PowerShell_profile.ps1 file set up with some custom settings, you can just add the code from profile.example.ps1 to your existing profile (assuming you didn’t change your prompt before).</p>
<p>After that, restart your Powershell prompt and enjoy!</p>
<p><strong>Important: </strong></p>
<p>The latest Posh-Git is only working with git 1.7.1 and higher, so if you are still running the 1.7.0.2 release you have to use the <a href="http://github.com/dahlbyk/posh-git/zipball/v0.2">v0.2 Posh-Git</a> release.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2010/09/01/using-git-from-powershell-just-got-easier-posh-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Removing .svn folders with Powershell</title>
		<link>http://www.tigraine.at/2009/11/24/removing-svn-folders-with-powershell/</link>
		<comments>http://www.tigraine.at/2009/11/24/removing-svn-folders-with-powershell/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 19:38:40 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/2009/11/24/removing-svn-folders-with-powershell/</guid>
		<description><![CDATA[I needed one simple thing: Delete all .svn folders from a repository so I can send it to my customer. While searching most of the results I got where either wrong, or completely besides the point, so I decided it may be worth sharing:
get-childitem -Include .svn -Recurse -force &#124; Remove-Item -Force –Recurse

]]></description>
			<content:encoded><![CDATA[<p>I needed one simple thing: Delete all .svn folders from a repository so I can send it to my customer. While searching most of the results I got where either wrong, or completely besides the point, so I decided it may be worth sharing:</p>
<blockquote><p><tt>get-childitem -Include .svn -Recurse -force | Remove-Item -Force –Recurse</tt></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2009/11/24/removing-svn-folders-with-powershell/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Wasted innovation: Google Wave</title>
		<link>http://www.tigraine.at/2009/10/31/wasted-innovation-google-wave/</link>
		<comments>http://www.tigraine.at/2009/10/31/wasted-innovation-google-wave/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 21:03:08 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/?p=792</guid>
		<description><![CDATA[ 
It was pretty inevitable that Google Wave would fail after being hailed as the solution to all our problems. Still, looking at a defeat gives me a feeling of malicious joy.
Let’s start at the beginning: I got my invite almost 3 weeks ago, and after an initial: wow cool. I found out that nobody [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wave.google.com/" target="_blank"><img style="border-right-width: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="wavelogo[1]" border="0" alt="wavelogo[1]" src="http://www.tigraine.at/wp-content/uploads/2009/10/wavelogo1.png" width="256" height="256" /></a> </p>
<p>It was pretty inevitable that Google Wave would fail after being hailed as the <em>solution to all our problems</em>. Still, looking at a defeat gives me a feeling of malicious joy.</p>
<p>Let’s start at the beginning: I got my invite almost 3 weeks ago, and after an initial: wow cool. I found out that nobody I care about had Wave. </p>
<p>After another week or so I finally got 20 invites to give out (if you want one send me an email, I’ve got 13 left) and finally managed to get the most important people I communicate to into Wave. </p>
<p>And, we had a lot of fun watching each other’s cursor spit out text live on the screen. Unfortunately, that was the only thing we found useful, and it was only funny for about 20 minutes. After that, we went back to our lives and that’s it. I’m still waiting for a reply to a Wave I sent Kristof almost 2 weeks ago. </p>
<p>So, what’s the problem? Wave technology is revolutionary, the idea is just not. It’s at heart:</p>
<p><strong>Awesome technology looking for a problem to solve</strong></p>
<p>Wave fails in most/all of it’s goals:</p>
<p><u>Replace Email</u>: Ok, so Email is everywhere and it works (thanks to GMail). I get mails pushed to my <a href="http://www.tigraine.at/2009/09/02/im-in-love-with-android/">Android phone</a>, and all in all: It does everything I want flawlessly and most importantly: EVERYWHERE.     <br />Wave on the other hand: Only inside my browser, no notification tool whatsoever. Pretty much equally useless as Facebook Messaging.</p>
<p><u>Replace Chat</u>: Instant typing is funny, but using the tool for IM just does not cut it usability wise. Live and Skype are great at that too, and even ICQ had that instant typing thing going some versions back (nobody wanted it). Wave once again misses all the major points here: No mobile client, no notifications, no desktop client. </p>
<p><u>Replace Message Boards</u>: Try running a public community off Wave: It’s impossible. Since you have to add people to the wave one by one, there is no way to spawn a new thread unless your community is really really small. Public viewing (the main purpose of most messaging boards) is impossible, thus the whole thing is not suited to replace a message board.</p>
<p><u>Replace Wiki</u>: Again, who cares about a wiki if it’s not publicly available? I know really few people who have a wiki for &lt;5 people, and even those few won’t care for Wave’s wacky and really laggy Playback feature. </p>
<p><u>Be a collaboration tool</u>: Well, Wave does that pretty well. Only that I don’t really see any online collaboration happening anytime soon, since most people are just too used to sending Word documents or Excel sheets around, they won’t dumb down to using a Wave just because they see each other’s cursors. </p>
<p>Well, and that’s about it. Wave tries to do a thousand things, and succeeds at not one of them. It’s totally useless without having any sort of desktop integration and mobile device integration. And once it has all of that, I still see myself sending more “Hey check your wave” emails than receiving a answer through wave.</p>
<p>What I want now? I want Google to use the awesome technology they created with Wave and bring it over to GMail. I want to be able to drag&amp;drop files to my GMail and have them be attached to my mails. I want this incredible spellchecker inside GMail and I want it now. That’s all. I don’t care for your revolutionary shiny thingy that does everything but nothing. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2009/10/31/wasted-innovation-google-wave/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Setting up TeamCity + git + psake for dotless</title>
		<link>http://www.tigraine.at/2009/10/27/setting-up-teamcity-git-psake-for-dotless/</link>
		<comments>http://www.tigraine.at/2009/10/27/setting-up-teamcity-git-psake-for-dotless/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 16:08:40 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[dotless]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/2009/10/27/setting-up-teamcity-git-psake-for-dotless/</guid>
		<description><![CDATA[Let me say one thing upfront: Setting this up has been a HUGE pain in the ass (PITA for short), and I really hope this gets fixed sometime in the future, because those 3 hours I just spent getting this done are never coming back.. 
Ok, just to make sure everybody understands: dotless is built [...]]]></description>
			<content:encoded><![CDATA[<p>Let me say one thing upfront: Setting this up has been a HUGE pain in the ass (PITA for short), and I really hope this gets fixed sometime in the future, because those 3 hours I just spent getting this done are never coming back.. </p>
<p>Ok, just to make sure everybody understands: dotless is built using a PSake build script that has to be run through Powershell. The script itself calls out to git and therefore relies on git being installed into the PATH. </p>
<p><strong>First: Git-Teamcity</strong></p>
<p>Since our build relies on executing a git command during build the official JetBrains plugin doesn’t cut it (it only copies the sources, not the .git folder). So I downloaded <a href="http://github.com/chrisortman/git-teamcity">git-teamcity from GitHub</a> and built it using maven (at least something worked). </p>
<p>After that <a href="http://www.knowledgetree.com/blog/continuous-integration-with-teamcity-git">I followed this tutorial</a> on how to install the plugin on TeamCity:</p>
<blockquote><ul>
<li>package the plugin by following the steps outlined in file pkg in the Git plugin folder: create a folder<strong>gitAgent/lib</strong> in the folder <strong>target</strong>, copy all the .jar files (should only be <strong>Git-vcs.jar</strong>) to this folder, and then zip <strong>gitAgent</strong> to <strong>gitAgent.zip</strong> </li>
<li>deploy the plugin by following the steps outlined in file deploy in the Git plugin folder: copy<strong>gitAgent.zip to</strong> <strong>\webapps\ROOT\update\plugins</strong>, and copy <strong>Git-vcs.jar</strong> to<strong>\webapps\ROOT\WEB-INF\lib</strong> </li>
</ul>
</blockquote>
<p>Well, after setting up a new VCS Root inside TeamCity the most important part is to set the VCS checkout mode to <strong>“Automatically on agent (if supported by VCS roots)”</strong></p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2009/10/image2.png" width="577" height="159" /> </p>
<p>Warning: Also make sure that you have git installed at C:\Program Files\git, because that is <a href="http://github.com/jlewallen/git-teamcity/blob/b714bafe7bd8e41444b320fd7f3d9350f1d3008b/src/main/java/org/hivedb/teamcity/plugin/GitConfiguration.java#L76">the only place git-teamcity will look</a> for the bin (unless you change the code).</p>
</p>
<p><strong>Second: Execute Powershell</strong></p>
<p>Apparently there is some major bug with the ConsoleRunner inside TeamCity so all attempts to simply run the Powershell didn’t work. Directly invoking Powershell led to the build timing out. After some digging I found this thread that explained the problem and hinted at a possible solution: <a href="http://www.jetbrains.net/devnet/thread/275854">Touble with Powershell and NAnt during build</a></p>
<p>So, I created a .bat file called TeamCity.bat that calls Powershell directly from it’s full path (C:\Windows\System32\…) like this:</p>
<blockquote><p><tt>
<p>C:\WINDOWS\system32\windowspowershell\v1.0\Powershell.exe .\psake.ps1</p>
<p>   </tt></p></blockquote>
<p>But this doesn’t work due to the above bug in TeamCity. The build kept hanging and eventually got terminated due to an timeout. So I had to change it to something like this:</p>
<blockquote><p><tt>
<p>echo abc | C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe .\psake.ps1</p>
<p>   </tt></p></blockquote>
<p>Putting echo in front of it made it work, I have no idea why, but id worked.    <br />Now the next problem came up: although I explicitly ran Set-Executionpolicy on the box the runner’s executionpolicy was not set. So I added the Set-Executionpolicy to the .bat file:</p>
<blockquote><p><tt>
<p>echo abc | C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe Set-ExecutionPolicy remotesigned        <br />echo abc | C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe .\psake.ps1</p>
<p>   </tt></p></blockquote>
<p>Now, finally the script was executing, but due to no environment variables, my buildscript could not locate git (due to the ConsoleRunner not having ANY environment variables present). </p>
<p>The final version of my TeamCity.bat then included a change to the PATH variable and it finally worked:</p>
<blockquote style="margin-right: 0px" dir="ltr"><p><tt>Set &quot;path=%path%;C:\Program Files\git\bin&quot;&#160; <br />echo abc | C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe Set-ExecutionPolicy remotesigned         <br />echo abc | C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe .\psake.ps1</tt></p>
</blockquote>
<p>At that point the build was finally executing and I then only had to tell TeamCity where to find the build artifacts and I was done. </p>
<p><strong>Conclusion</strong></p>
<p>Now that it works, I’m glad I took the time to set it up. But the process could have gone smoother.    <br />Anyway, the good news is:</p>
<p>You can now get a release version from every future commit to the dotless repository right from <a href="http://dotlesscss.com:8081/viewType.html?buildTypeId=bt3&amp;tab=buildTypeStatusDiv">our dotless TeamCity server</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2009/10/27/setting-up-teamcity-git-psake-for-dotless/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using ILMerge to hide your dependencies</title>
		<link>http://www.tigraine.at/2009/10/01/using-ilmerge-to-hide-your-dependencies/</link>
		<comments>http://www.tigraine.at/2009/10/01/using-ilmerge-to-hide-your-dependencies/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 13:10:54 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/2009/10/01/using-ilmerge-to-hide-your-dependencies/</guid>
		<description><![CDATA[When developing a library that should be used by 3rd parties one major concern is dependency versioning. Meaning, if your code uses a common library like Castle.Windsor, things will get ugly if your users also use Castle.Windsor in another version. 
Especially with very popular infrastructure libraries like Castle you can’t expect all your users not [...]]]></description>
			<content:encoded><![CDATA[<p>When developing a library that should be used by 3rd parties one major concern is dependency versioning. Meaning, if your code uses a common library like Castle.Windsor, things will get ugly if your users also use Castle.Windsor in another version. </p>
<p>Especially with very popular infrastructure libraries like Castle you can’t expect all your users not to use it, after all you’re probably using it for the same reason they do: Best of breed solution to a common problem.    <br />To avoid trouble, many library authors decide not to take external dependencies so they won’t see versioning issues, while having to re-implement some infrastructure themselves.</p>
<p>Coming up with something simple usually isn’t that hard. If you just need a very limited feature set you can <a href="http://www.tigraine.at/2009/05/21/my-very-own-inversion-of-control-container/">build your own Inversion of Control container</a> quite easily without relying on external libraries. Yet, if you do you still have to spend time building, maintaining and extending the thing over time. </p>
<p>The other option is to use the fabulous tool <a href="http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx">ILMerge</a> by Microsoft that allows you to munch multiple assemblies into one DLL. This is also handy if your product consists of many assemblies that you want to bundle, but in this case there is one cool thing ILMerge does: /internalize</p>
<p>ILMerge usually is called from the command line and works like this:</p>
<blockquote><p>ILMerge.exe &lt;main-assembly.dll&gt; [&lt;library1.dll&gt; &lt;library2.dll&gt;] /out:&lt;output-file.dll&gt; /t:library</p>
</blockquote>
<p>Now if you add the magic parameter <u>/internalize</u> ILmerge will hide all type names inside &lt;library1.dll&gt; and &lt;library2.dll&gt; from assemblies that reference the output assembly.</p>
<p>So in <a href="http://www.tigraine.at/2009/09/29/introducing-elms-connector-v-1-beta/">ElmsConnector’s</a> case where Windsor is used internally the ILMerge call looks like this:</p>
<p><a href="http://www.tigraine.at/wp-content/uploads/2009/10/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2009/10/image_thumb.png" width="441" height="149" /></a> </p>
<p>ElmsConnector-partial.dll is the original output dll from my msbuild process while ILMerge will merge all of these Castle assemblies into the output ElmsConnector.dll.    <br />Now the real magic here is that if I open the resulting assembly in Reflector it still lists all Castle assemblies:</p>
<p><a href="http://www.tigraine.at/wp-content/uploads/2009/10/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2009/10/image_thumb1.png" width="341" height="219" /></a> </p>
<p>But inside Visual Studio none of the Castle.* namespaces exists because they are hidden. </p>
<p>This technique allows us to use our favorite tools in libraries without having to think too hard about versioning.</p>
<p>Now, obviously there are also some things to consider here:    <br />If you want to expose any class that is inside one of the internalized assemblies, you have to tell ILMerge so through the exclude file (<a href="http://github.com/ayende/rhino-mocks/blob/master/ilmerge.exclude">an example of this</a> can be seen with Rhino.Mocks). Once you exclude one type and your users try to use that type they will see a “ambiguous type” compile-time error. That’s why Rhino.Mocks also comes in a unmerged flavor </p>
<p>Another thing to remember is (especially with web-apps) that your users can’t see any internalized assemblies, so any configuration you put into your web.config for them won’t work. Best example may be the PerWebRequest lifesyle for Windsor: It relies on a httpModule to be registered through the web.config, you can’t make that happen with the externalized assembly (and it leads to versioning problems once you exclude it).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2009/10/01/using-ilmerge-to-hide-your-dependencies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git cheatsheet floating on your desktop as Windows 7 gadget</title>
		<link>http://www.tigraine.at/2009/09/25/git-cheatsheet-floating-on-your-desktop-as-windows-7-gadget/</link>
		<comments>http://www.tigraine.at/2009/09/25/git-cheatsheet-floating-on-your-desktop-as-windows-7-gadget/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 23:18:08 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/2009/09/25/git-cheatsheet-floating-on-your-desktop-as-windows-7-gadget/</guid>
		<description><![CDATA[While browsing a bit through the GitHub guides section I noticed a wonderful git cheat sheet that outlines the most used commands with some basic usage instructions created by Zack Rusin. 
I have a love/hate relationship with cheat sheets because most of the time I print them and then they usually merge with all the [...]]]></description>
			<content:encoded><![CDATA[<p>While browsing a bit through the <a href="http://github.com/guides/git-cheat-sheet">GitHub guides section</a> I noticed a wonderful git cheat sheet that outlines the most used commands with some basic usage instructions <a href="http://zrusin.blogspot.com/2007/09/git-cheat-sheet.html">created by Zack Rusin</a>. </p>
<p>I have a love/hate relationship with cheat sheets because most of the time I print them and then they usually merge with all the trash that’s laying around my desk so I hardly ever get to use them (except for when I really need them and they are laying face down below my mouse pad). </p>
<p>So the obvious place for that sheet would be my secondary monitor so I can refer to it when needed. Only problem here is that I really don’t want to run a browser window all the time just to see a cheat sheet, and setting it as my wallpaper would mean no more beautiful images changing every 10 minutes (I love Win7 for this!). </p>
<p>Now, what is between your applications and your desktop? Right: Windows gadgets.</p>
<p>By following the <a href="http://msdn.microsoft.com/de-de/library/aa965850(en-us,VS.85).aspx">guide from the Microsoft developer center</a> I very quickly ended up with a quite nice gadget that now beautifully floats above my desktop with all the common used git commands I need to check while scratching my head (dementia I hate you). </p>
<p><a href="http://www.tigraine.at/wp-content/uploads/2009/09/image9.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2009/09/image_thumb7.png" width="644" height="425" /></a> </p>
<p>Pair this with the awesome Aero Peek at the desktop from Windows 7 (if you hit Win+Space all Windows become glass and you see your gadgets + desktop), and you can quickly glance at the cheat sheet without having to run any application or change your wallpaper. And if I don’t feel like doing git I just close the gadget with one click.</p>
<p>As said above, the cheat sheet is done by Zack Rusin. Thanks for this gem! The code for the gadget and the download is on GitHub and is licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html">ASL-2</a> (yeah I like that license a lot).</p>
<p>The GitHub repository is at: <a href="http://github.com/Tigraine/git-cheatsheet-gadget">http://github.com/Tigraine/git-cheatsheet-gadget</a></p>
<p>And to just download the gadget hit the <a href="http://github.com/Tigraine/git-cheatsheet-gadget/downloads">downloads section within GitHub</a> (or <a href="http://cloud.github.com/downloads/Tigraine/git-cheatsheet-gadget/git-cheatsheet.gadget">directly</a>)</p>
<p>Oh and please excuse if GitHub is down sometimes right now. They are in the process of <a href="http://github.com/blog/497-rackspace-move-scheduled-for-sunday-september-27th-at-5pm-pacific-time">moving their servers to a new hoster</a> and hopefully they will be reliably back up by Monday. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2009/09/25/git-cheatsheet-floating-on-your-desktop-as-windows-7-gadget/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My new toy: Wacom Bamboo</title>
		<link>http://www.tigraine.at/2009/07/09/my-new-toy-wacom-bamboo/</link>
		<comments>http://www.tigraine.at/2009/07/09/my-new-toy-wacom-bamboo/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 18:09:45 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/2009/07/09/my-new-toy-wacom-bamboo/</guid>
		<description><![CDATA[After almost two weeks of waiting for it I finally picked up my Wacom Bamboo today. 
So, here comes the obvious for a programmer:
 
So, I got myself a pen tablet. Why would I do something like that?
First: Rest assured, I didn’t jump on the designer bandwagon, I still suck at drawing and that Hello [...]]]></description>
			<content:encoded><![CDATA[<p>After almost two weeks of waiting for it I finally picked up my <a href="http://www.wacom.com/bambootablet/bamboo.php">Wacom Bamboo</a> today. </p>
<p>So, here comes the obvious for a programmer:</p>
<p><a href="http://www.tigraine.at/wp-content/uploads/2009/07/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2009/07/image-thumb.png" width="240" height="92" /></a> </p>
<p>So, I got myself a pen tablet. Why would I do something like that?</p>
<p>First: Rest assured, I didn’t jump on the designer bandwagon, I still suck at drawing and that Hello World up there took me 3 tries and still looks bad. </p>
<p>It just happened that I loved Jon Skeet’s presentation slides he had for the <a href="http://msmvps.com/blogs/jon_skeet/archive/2009/06/19/os-jam-at-google-london-c-4-and-the-dlr.aspx">OS Jam at Google London on C# 4 and DLR</a>. The idea is just brilliant. Almost no real content on the slides, just some pointers in a very “human” style.</p>
<p>While I was preparing for this years <a href="http://www.tigraine.at/2008/07/04/it-camp-at-klagenfurt-university/">summer-camp at the University</a> (I’m instructing some kids on XNA game programming again) I used a <a href="http://www.wacom.com/cintiq/index.php">CintiQ 21UX</a> we have sitting at the company to try this with some pretty cool results: </p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2009/07/image1.png" width="320" height="245" /> </p>
</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2009/07/image2.png" width="320" height="245" /></p>
<p>Obviously, a bunch of 16 year olds isn’t the perfect gauge for presentation slides, but almost everyone who saw that slide deck loved it. It’s so totally different and less formal and tense that it was totally worth the work. I just didn’t want to make a habit out of using other people’s PCs at work so I obviously needed something similar, yet much cheaper. And that’s where the Bamboo A6 really came in handy: 70€ at my local <a href="http://www.ditech.at">DiTech</a> store was quite a bargain. (Although it took them 2 weeks to order and deliver that thing!)</p>
<p>On the Bamboo side of things, it just works. You plug it in and it works. After installing the driver I had around 30 minutes of trouble finding the settings dialog to make the tablet not target my whole screen (A6 pointing at a 24” screen is just awful), but once I reduced that it became a joy to work with. Recognition is very sharp and very precise, the different pressure levels are nice in Photoshop.</p>
<p>I’m also amazed about how well the Windows Vista handwriting recognition has become. Obviously as a programmer I’m still a thousand times faster when using the keyboard, but it’s nice see it working. </p>
<p>Another application besides presentations is obviously my blog. I hate UML modeling software with all my heart. So much that my drafts folder has accumulated 3 different rants about how clumsy and slow it is to throw together a UML with the current tools. I usually end up writing code to generate a class diagram instead of trying to model a class without coding it.    <br />With the power of a tablet I can just throw together a raw sketch out the UML to illustrate my point without having to jump through all the hoops current modeling software puts you through. So in the future, expect some of these:</p>
<p><a href="http://www.tigraine.at/wp-content/uploads/2009/07/image3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.tigraine.at/wp-content/uploads/2009/07/image-thumb1.png" width="240" height="197" /></a>&#160;</p>
</p>
<p>Btw: Thanks for all the feedback on the iC-Website design (if you didn’t already vote, please <a href="http://www.tigraine.at/2009/07/03/new-imagineclub-website-design-poll/">tell us what you think</a>)!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2009/07/09/my-new-toy-wacom-bamboo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>.NET Unit testing tools</title>
		<link>http://www.tigraine.at/2009/05/31/net-unit-testing-tools/</link>
		<comments>http://www.tigraine.at/2009/05/31/net-unit-testing-tools/#comments</comments>
		<pubDate>Sun, 31 May 2009 21:10:24 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/2009/05/31/net-unit-testing-tools/</guid>
		<description><![CDATA[After posting my tools list today I got asked why I didn’t list any testing frameworks. Obviously, I love testing, so why no testing tools like Gallio, NUnit or Testdriven.NET etc?     The answer is rather simple, Resharper runs my tests for me.
By default Resharper can run NUnit tests, if you install [...]]]></description>
			<content:encoded><![CDATA[<p>After posting <a href="http://www.tigraine.at/2009/05/31/essential-tools-for-net-developers/">my tools list</a> today I got asked why I didn’t list any testing frameworks. Obviously, <a href="http://www.tigraine.at/category/programmierung/testing/">I love testing</a>, so why no testing tools like Gallio, NUnit or <a href="http://testdriven.net/">Testdriven.NET</a> etc?     <br />The answer is rather simple, Resharper runs my tests for me.</p>
<p>By default Resharper can run NUnit tests, if you install <a href="http://www.mbunit.com/">Mbunit</a> it can run those too, and if you just copy over the resharper support library from the <a href="http://xunitcontrib.codeplex.com/">XUnit contrib project</a> to your Resharper/Plugins directory it can also run XUnit.</p>
<p><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="282" alt="image" src="http://www.tigraine.at/wp-content/uploads/2009/05/image5.png" width="553" border="0" /></p>
<p>Also, almost all open source frameworks out there include their test runner in their code tree, so you don’t need to worry about what exotic test frameworks are out there, you’ll be provided with the appropriate runners.</p>
<p>On the testing framework side I recently (~4 months) switched over to xUnit as it’s syntax felt much better than that of xUnit or Mbunit.    <br />Also I am currently looking into maybe using a BDD testing framework like <a href="http://github.com/machine/machine.specifications/tree/master">MSpec</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2009/05/31/net-unit-testing-tools/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Essential tools for .NET Developers</title>
		<link>http://www.tigraine.at/2009/05/31/essential-tools-for-net-developers/</link>
		<comments>http://www.tigraine.at/2009/05/31/essential-tools-for-net-developers/#comments</comments>
		<pubDate>Sun, 31 May 2009 12:46:08 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/2009/05/31/essential-tools-for-net-developers/</guid>
		<description><![CDATA[I always thought that I am up and running the moment Visual Studio is installed on a machine.      Unfortunately, life isn’t that easy any more and I thought it might be interesting to share what I consider essential from my toolbox.
IDEs 

Visual Studio 2008
Resharper 4.5
Notepad++

Although some people say they can [...]]]></description>
			<content:encoded><![CDATA[<p><font style="background-color: #ffffff">I always thought that I am up and running the moment Visual Studio is installed on a machine.      <br />Unfortunately, life isn’t that easy any more and I thought it might be interesting to share what I consider essential from my toolbox.</font></p>
<h4>IDEs </h4>
<ol>
<li>Visual Studio 2008</li>
<li><a href="http://www.jetbrains.com/resharper/">Resharper 4.5</a></li>
<li><a href="http://notepad-plus.sourceforge.net/de/site.htm">Notepad++</a></li>
</ol>
<p>Although some people say they can work with other IDEs in .NET, I consider Visual Studio a absolute necessity. Not so much for the Studio itself but as a shell for Resharper, the very best tool I have yet come across. It’s so damn convenient and increases productivity by such a margin that <a href="http://twitter.com/Tigraine/status/1948364216">I simply can’t use Visual Studio</a> without it any more. Although Resharper isn’t free, I strongly suggest you try it out for 30 days. I feel it’s a good investment.</p>
<p>And Notepad++ is one of many great simple editors that make editing and reviewing of files easy.</p>
<h5>Source Control</h5>
<p>If you plan on working with open source tools, be prepared to bring their tools to the party. Nothing is worse than needing some source and not being able to access the SCM.   <br />I usually install the following:</p>
<ol>
<li><a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a> &#8211; Subversion right from the Explorer right click menu. Very good and very mature SVN client. </li>
<li><a href="http://www.sliksvn.com/en/download">SlikSVN</a> &#8211; Unfortunately TortosieSVN doesn’t install SVN binaries, so if you want to be able to run SVN from the command line you better get the conveniently packed SlikSVN subversion binaries.</li>
<li><a href="http://bitbucket.org/tortoisehg/stable/downloads/">TortoiseHG</a> &#8211; Same idea as with TortoiseSVN but for <a href="http://www.tigraine.at/2009/05/30/moving-to-mercurial/">Mercurial</a>, but it installs the hg binaries so you can use hg from the command line.</li>
<li><a href="http://code.google.com/p/msysgit/">msysGit</a> &#8211; A GUI for git together with a custom git command line that emulates a *nix shell for git operations. Not so convenient as HG, but Fluent Nhibernate and most tools by Jon Skeet use git.</li>
</ol>
<h5>Build tools</h5>
<p>Getting the source is usually not enough, sometimes you need to be able to build it too.   <br />While most projects can be built by simply starting up Visual Studio and building, others require you to run a build script like NAnt. </p>
<ol>
<li><a href="http://nant.sourceforge.net/">NAnt</a> &#8211; NAnt is a free .NET build tool. In theory it is kind of like make without make&#8217;s wrinkles. In practice it&#8217;s a lot like <a href="http://ant.apache.org/">Ant</a>.</li>
</ol>
<p>Download the latest NAnt release and unpack the zip to some convenient folder. Then create a file called nant.bat in your C:\windows folder with the following content:</p>
<div class="wlWriterEditableSmartContent" id="scid:2e6d557b-b705-4c34-b5ad-8606cf99c7de:d4eed943-fa7b-4b77-b7bb-d23acef4d132" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="csharp">
@echo off
"C:\Program Files\NAnt\bin\NAnt.exe" %*
</pre>
</div>
<p>(Obviously you should change the path to your NAnt executable).<br />
  <br />Now whenever you encounter a project with a *.build file you can simply start a command line window and type <em>nant</em> to start building the source (that’s how you build the the Castle Project and NHibernate).</p>
<ol>
<li><a href="http://www.ruby-lang.org/de/downloads/">Rake</a> &#8211; I don’t use rake, but I sure know Fluent NHibernate does. Rake is the build tool used for Ruby projects, but it’s gaining popularity. On windows installing it was rather simple, just get the Ruby One-Click Installer from their downloads page and install it with gems (gems is used for installing extensions and libaries).</li>
</ol>
<p>If none of the above apply, usually every project has a howtobuild.txt that instructs you on how to run the build.</p>
<h5>Database</h5>
<p>Hugely depends on what tools you use. But it never hurts to have the following:</p>
<ol>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=08e52ac2-1d62-45f6-9a4a-4b76a8564a2b&amp;displaylang=en">Sql Server 2008 Management Studio Express</a> &#8211; It’s free, and allows you to run queries and create databases. Nothing fancy as reporting or real server administration, but what developer really wants to do a DBAs job?</li>
<li><a href="http://nhprof.com/">NHProf</a> &#8211; If you are using NHibernate for your data access needs (and I believe you should), you will find this tool well worth it’s money. It’s by no means cheap, but it will watch all your database queries, analyze them and point out possible performance bottlenecks for you.</li>
</ol>
<h5>Others</h5>
<ol>
<li><a href="http://www.sourcegear.com/diffmerge/downloads.html">Sourcegear DiffMerge</a> &#8211; A very good and free diff tool in case the ones in TortoiseSVN don’t cut it.</li>
<li><a href="http://www.red-gate.com/products/reflector/">.NET Reflector</a> &#8211; Sometimes you don’t have access to the source code, or you don’t want to get the source just to look at one file.
<p>.NET Reflector allows you to look at all the types inside an assembly, and if it’s not obfuscated it allows you to decompile it into your language of choice and look at the code (you could decompile VB programs into C# for example).</li>
<p>Please note that there are myriads of other tools lists out there, and if your are a web developer you’ll need some more tools for debugging HTML/JS. The above are the ones I consider essential to do .NET desktop/backend development when using open source libraries as Castle or NHibernate.</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2009/05/31/essential-tools-for-net-developers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Castle Windsor XML Configuration Schema</title>
		<link>http://www.tigraine.at/2009/01/27/castle-windsor-xml-configuration-schema/</link>
		<comments>http://www.tigraine.at/2009/01/27/castle-windsor-xml-configuration-schema/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 18:06:11 +0000</pubDate>
		<dc:creator>Daniel Hölbling</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.tigraine.at/2009/01/27/castle-windsor-xml-configuration-schema/</guid>
		<description><![CDATA[While creating a Windsor XML configuration for a new project today I found myself looking too much at the reference to get started. I figured this may be because of the lack of a schema that would provide me Intellisense in Visual Studio. Shockingly I couldn’t find a xsd schema file for the Windsor configuration. [...]]]></description>
			<content:encoded><![CDATA[<p>While creating a Windsor XML configuration for a new project today I found myself looking too much at the reference to get started. I figured this may be because of the lack of a schema that would provide me Intellisense in Visual Studio. Shockingly I couldn’t find a xsd schema file for the Windsor configuration. </p>
<p>I then looked at some w3schools tutorials and figured out how to do a xsd schema myself and tried to remodel the <a href="http://www.castleproject.org/container/documentation/trunk/manual/windsorconfigref.html">Windsor configuration reference</a>.</p>
<p>You can grab the xsd schema file here: <a href="http://www.tigraine.at/windsor-configuration.xsd">windsor-configuration.xsd</a></p>
<p>I’ll post a little tutorial on how to load it inside Visual Studio later.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tigraine.at/2009/01/27/castle-windsor-xml-configuration-schema/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
