<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:georss="http://www.georss.org/georss" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>The Right Stuff</title>
    <link>http://www.therightstuff.de/</link>
    <description>Windows, .NET, Music, Cooking</description>
    <image>
      <url>http://www.therightstuff.de/images/ChannelImage.jpg</url>
      <title>The Right Stuff</title>
      <link>http://www.therightstuff.de/</link>
    </image>
    <language>en-us</language>
    <copyright>Alexander Groß</copyright>
    <lastBuildDate>Mon, 12 May 2008 13:19:04 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8139.823</generator>
    <managingEditor>agross@therightstuff.de</managingEditor>
    <webMaster>agross@therightstuff.de</webMaster>
    <geo:lat>51.325330</geo:lat><geo:long>12.342740</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=b984a8e7-e94d-4eed-a705-5dc479f959e8</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,b984a8e7-e94d-4eed-a705-5dc479f959e8.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,b984a8e7-e94d-4eed-a705-5dc479f959e8.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=b984a8e7-e94d-4eed-a705-5dc479f959e8</wfw:commentRss>
      <title>Importing Subversion Repositories to Google Code</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,b984a8e7-e94d-4eed-a705-5dc479f959e8.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/288679144/Importing+Subversion+Repositories+To+Google+Code.aspx</link>
      <pubDate>Mon, 12 May 2008 13:19:04 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;I recently added &lt;a title="Graffiti-UserGroups"  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fcode.google.com%2fp%2fgraffiti-usergroups%2f"&gt;two&lt;/a&gt; of my &lt;a title="Now Playing"  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fcode.google.com%2fp%2fnowplaying-wlw%2f"&gt;pet projects&lt;/a&gt; to Google Code. I chose Google's Open Source hosting because they&amp;#160; have a very clean UI with integrated issue tracking and also offer native support for Subversion. One of the many aspects that make Subversion a decent choice is the ability to import existing SVN repositories to Google Code. That is, the whole history is uploaded and your soon-to-be open source project doesn't loose valuable undo history. &lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fYAGNI"&gt;YAGNI&lt;/a&gt;? Maybe.&lt;/p&gt;  &lt;p&gt;Importing a complete repository to Google Code is &lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fwww.google.de%2furl%3fsa%3dt%26ct%3dres%26cd%3d1%26url%3dhttp%253A%252F%252Fcode.google.com%252Fsupport%252Fbin%252Fanswer.py%253Fanswer%253D56673%2526topic%253D10386%26ei%3d9ysoSO-8PIyE0QTHiIWqCw%26usg%3dAFQjCNH-JOXJfPSQ_qySajkCEYpMZFTwJA%26sig2%3dIqgUJjq6ovV23t0WVDsDVQ"&gt;well documented&lt;/a&gt;, but what if your repository contains several projects and you just want to upload a certain one? Actually Subversion has all you need, there are just a couple of things to prepare. I will provide everything you need here, you may also want to use &lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fwhynotwiki.com%2fHow_I_moved_my_code_repository_to_Google_Code"&gt;this excellent write-up&lt;/a&gt; (also &lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fwhynotwiki.com%2fSubversion_%2f_Dump_and_loading"&gt;look here&lt;/a&gt;) which I used as a reference. The syntax presented here works on Windows, whereas the author of the above articles was working on a *nix machine, so the command lines differ a bit.&lt;/p&gt;  &lt;h3&gt;Create your Google Code project and reset the Subversion repository to revision 0&lt;/h3&gt;  &lt;p&gt;After you created the project on Google Code you can find the &amp;quot;Reset Subversion Repository&amp;quot; link at the bottom of the &amp;quot;Source&amp;quot; tab.&lt;/p&gt; &lt;img style="text-align: center" alt="Reset" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/ImportingPrivateSubversionRepositoriesto_BF30/Reset_72dfcb9c-a246-4a5b-968d-55a3466d0d9b.png" /&gt;   &lt;h3&gt;Prepare your Subversion repository&lt;/h3&gt;  &lt;p&gt;You need local access to the Subversion server, a Remote Desktop or SSH connection would suffice. I'm assuming your repository is accessible over HTTPS on port 8443. Here are the paths used in the command lines below:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="0" width="612"&gt;&lt;thead&gt;     &lt;tr&gt;       &lt;th&gt;Property&lt;/th&gt;        &lt;th&gt;Value&lt;/th&gt;     &lt;/tr&gt;   &lt;/thead&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;SVN repositories root&lt;/td&gt;        &lt;td&gt;C:\Subversion\&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;SVN repository containing the project&lt;/td&gt;        &lt;td&gt;C:\Subversion\projects&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Repository URL&lt;/td&gt;        &lt;td&gt;https://localhost:8443/svn/projects/&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Project to import to Google Code&lt;/td&gt;        &lt;td&gt;https://localhost:8443/svn/projects/foo/Project-FooBar/&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Google Code Subversion URL&lt;/td&gt;        &lt;td&gt;https://project-foobar.googlecode.com/svn/&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h4&gt;Dump your repository filtering the project path&lt;/h4&gt;  &lt;p&gt;First you need to dump the SVN repository containing the project in question. &lt;strong&gt;svnadmin dump&lt;/strong&gt; saves the contents of the repository to the &lt;strong&gt;C:\Subversion\project-foobar.dump&lt;/strong&gt; file on disk. To only take the parts into account we're interested in, use &lt;strong&gt;svndumpfilter&lt;/strong&gt; to exclude everything outside the project path.&lt;/p&gt;  &lt;p&gt;Renumbering revisions and dropping empty revisions cleans up the resulting dump and prevents revisions with no changes.&lt;/p&gt;  &lt;pre&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.4%2fsvn.ref.svnadmin.c.dump.html"&gt;svnadmin dump&lt;/a&gt; C:\Subversion\projects\ | svndumpfilter --drop-empty-revs --renumber-revs include /foo/Project-FooBar/ &amp;gt; C:\Subversion\project-foobar.dump

Including (and dropping empty revisions for) prefixes:
   'foo/Project-FooBar'

* Dumped revision 0.
Revision 0 committed as 0.
* Dumped revision 1.
Revision 1 skipped.
...&lt;/pre&gt;

&lt;h4&gt;Create a new repository for the project&lt;/h4&gt;

&lt;p&gt;Now that you have dump in place, create a new repository for Project-FooBar.&lt;/p&gt;

&lt;pre&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.4%2fsvn.ref.svnadmin.c.create.html"&gt;svnadmin create&lt;/a&gt; C:\Subversion\project-foobar-import&lt;/pre&gt;

&lt;h4&gt;Create directories needed to load the dump&lt;/h4&gt;

&lt;p&gt;To make the import process succeed, you have to create the paths that are not included in the dump, i.e. all directories above the path that was included by &lt;strong&gt;svndumpfilter&lt;/strong&gt;. In the our case, this is the &lt;strong&gt;/foo&lt;/strong&gt; directory.&lt;/p&gt;

&lt;pre&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.4%2fsvn.ref.svn.c.mkdir.html"&gt;svn mkdir&lt;/a&gt; https://localhost:8443/svn/project-foobar-import/foo/ -m &amp;quot;Folder created for import&amp;quot;

Committed revision 1.&lt;/pre&gt;

&lt;h4&gt;Load the filtered dump&lt;/h4&gt;

&lt;p&gt;It's time to import the dump to the repository just created.&lt;/p&gt;

&lt;pre&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.4%2fsvn.ref.svnadmin.html"&gt;svnadmin&lt;/a&gt; load C:\Subversion\project-foobar-import &amp;lt; C:\Subversion\project-foobar.dump

&amp;lt;&amp;lt;&amp;lt; Started new transaction, based on original revision 1
     * adding path : foo/Project-FooBar ... done.
     * adding path : foo/Project-FooBar/trunk ... done.
...&lt;/pre&gt;

&lt;p&gt;If you didn't create all necessary directories in the last step, you will receive an error message like this:&lt;/p&gt;

&lt;pre&gt;&amp;lt;&amp;lt;&amp;lt; Started new transaction, based on original revision 1
     * adding path : foo/Project-FooBar ...svnadmin: File not found: transaction '1-1', path 'foo/Project-FooBar'&lt;/pre&gt;

&lt;h4&gt;Move directories such that they follow the standard Subversion directory structure&lt;/h4&gt;

&lt;p&gt;Your can now have a look at the new repository by pointing your browser to https://localhost:8443/svn/project-foobar-import/ where you only should see Project-FooBar.&lt;/p&gt;

&lt;p&gt;The next step moves the project to the root of the repository and aligns the directory structure with &lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.0%2fch05s04.html%23svn-ch-5-sect-6.1"&gt;Subversion's default directory layout&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.4%2fsvn.ref.svn.c.move.html"&gt;svn move&lt;/a&gt; https://localhost:8443/svn/project-foobar-import/foo/Project-FooBar/trunk/ https://localhost:8443/svn/project-foobar-import/trunk/ -m &amp;quot;Folder moved&amp;quot;
svn move https://localhost:8443/svn/project-foobar-import/foo/Project-FooBar/tags/ https://localhost:8443/svn/project-foobar-import/tags/ -m &amp;quot;Folder moved&amp;quot;
svn move https://localhost:8443/svn/project-foobar-import/foo/Project-FooBar/branches/ https://localhost:8443/svn/project-foobar-import/branches/ -m &amp;quot;Folder moved&amp;quot;
&lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.4%2fsvn.ref.svn.c.delete.html"&gt;svn delete&lt;/a&gt; https://localhost:8443/svn/project-foobar-import/foo/Project-FooBar/ -m &amp;quot;Folder deleted&amp;quot;&lt;/pre&gt;

&lt;h3&gt;Upload your Subversion repository to Google Code using &lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.4%2fsvn.ref.svnsync.html"&gt;svnsync&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;All set. The last step is to upload your Subversion repository to Google Code using the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fwww.google.de%2furl%3fsa%3dt%26ct%3dres%26cd%3d1%26url%3dhttp%253A%252F%252Fcode.google.com%252Fsupport%252Fbin%252Fanswer.py%253Fanswer%253D56673%2526topic%253D10386%26ei%3d9ysoSO-8PIyE0QTHiIWqCw%26usg%3dAFQjCNH-JOXJfPSQ_qySajkCEYpMZFTwJA%26sig2%3dIqgUJjq6ovV23t0WVDsDVQ"&gt;documented command line&lt;/a&gt; below.&lt;/p&gt;

&lt;pre&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.4%2fsvn.ref.svnsync.c.init.html"&gt;svnsync init&lt;/a&gt; https://project-foobar.googlecode.com/svn/ https://localhost:8443/svn/project-foobar-import/
Copied properties for revision 0.

&lt;a  href="http://www.therightstuff.de/ct.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8&amp;amp;url=http%3a%2f%2fsvnbook.red-bean.com%2fen%2f1.4%2fsvn.ref.svnsync.c.sync.html"&gt;svnsync sync&lt;/a&gt; https://project-foobar.googlecode.com/svn/
Committed revision 1.
Copied properties for revision 1.
...&lt;/pre&gt;

&lt;p&gt;The whole import process will take a little bit, depending on the size of your repository. It took me about 40 minutes for a repository with about 100 revisions, time to grab a cup of coffee.&lt;/p&gt;

&lt;h3&gt;The script&lt;/h3&gt;

&lt;p&gt;Of course you can script the whole process:&lt;/p&gt;

&lt;pre&gt;@rem Create dump
svnadmin dump C:\Subversion\projects\ | svndumpfilter --drop-empty-revs --renumber-revs include /foo/Project-FooBar/ &amp;gt; C:\Subversion\project-foobar.dump

@rem Create repository for import
svnadmin create C:\Subversion\project-foobar-import

@rem Create directories needed for the import to succeed
svn mkdir https://localhost:8443/svn/project-foobar-import/foo/ -m &amp;quot;Folder created for import&amp;quot;

@rem Load dump
svnadmin load C:\Subversion\project-foobar-import &amp;lt; C:\Subversion\project-foobar.dump

@rem Move folders around
svn move https://localhost:8443/svn/project-foobar-import/foo/Project-FooBar/trunk/ https://localhost:8443/svn/project-foobar-import/trunk/ -m &amp;quot;Folder moved&amp;quot;
svn move https://localhost:8443/svn/project-foobar-import/foo/Project-FooBar/tags/ https://localhost:8443/svn/project-foobar-import/tags/ -m &amp;quot;Folder moved&amp;quot;
svn move https://localhost:8443/svn/project-foobar-import/foo/Project-FooBar/branches/ https://localhost:8443/svn/project-foobar-import/branches/ -m &amp;quot;Folder moved&amp;quot;

svn delete https://localhost:8443/svn/project-foobar-import/foo/Project-FooBar/ -m &amp;quot;Folder deleted&amp;quot;

@rem Sync with Google Code
svnsync init https://project-foobar.googlecode.com/svn/ https://localhost:8443/svn/project-foobar-import/
svnsync sync https://project-foobar.googlecode.com/svn/&lt;/pre&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=b984a8e7-e94d-4eed-a705-5dc479f959e8"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,b984a8e7-e94d-4eed-a705-5dc479f959e8.aspx</comments>
      <category>Tools and Software</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F05%2F12%2FImporting%2BSubversion%2BRepositories%2BTo%2BGoogle%2BCode.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/05/12/Importing+Subversion+Repositories+To+Google+Code.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=81832312-c253-4921-83e9-573271fcb8a2</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,81832312-c253-4921-83e9-573271fcb8a2.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,81832312-c253-4921-83e9-573271fcb8a2.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=81832312-c253-4921-83e9-573271fcb8a2</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Introducing Graffiti-UserGroups for Graffiti CMS</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,81832312-c253-4921-83e9-573271fcb8a2.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/284796975/Introducing+GraffitiUserGroups+For+Graffiti+CMS.aspx</link>
      <pubDate>Tue, 06 May 2008 17:22:14 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;It's been a while: Sometime last August the SharePoint hosting contract for the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fdotnet-leipzig.de%2f"&gt;.NET User Group Leipzig&lt;/a&gt; ran out and since then we basically didn't have an online presence. Our &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fdotnet-leipzig.de%2fsummercamp%2f"&gt;.NET Summercamp 2007&lt;/a&gt; conference and a couple of smaller User Group events took away their share of spare time so I didn't find time to create our new home page. Over the last couple of months I evaluated several Content Management Systems for our to-be-developed homepage and what can I say, I was a bit disappointed. One CMS to remain unnamed showed very buggy behavior when setting up basic navigation elements and &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fwww.dotnetnuke.com%2f"&gt;DotNetNuke&lt;/a&gt; had some scary CSS to override for custom layouts and uses tables all over the place.&lt;/p&gt;  &lt;p&gt;Two months ago I came across telligent's &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fgraffiticms.com%2f"&gt;Graffiti CMS&lt;/a&gt;. Delightful! They really appear to be driven by their &amp;quot;Content Made Simple&amp;quot; concept. Not only do they have a nice Ajax-y administration UI, Graffiti also provides an extremely simple and efficient &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fgraffiticms.com%2fsupport%2fadvanced-options%2fextending-chalk%2f"&gt;extensibility model&lt;/a&gt;. The &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fwww.castleproject.org%2fothers%2fnvelocity%2findex.html"&gt;NVelocity&lt;/a&gt; template engine is also very easy to grasp. (NVelocity is part of my beloved &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fwww.castleproject.org%2f"&gt;Castle project&lt;/a&gt;.)&lt;/p&gt;  &lt;p&gt;I started implementing some &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fgraffiticms.com%2fsupport%2fadvanced-options%2fchalk-overview%2f"&gt;macros&lt;/a&gt; for the User Group events, and soon it became clear that this might be something other User Groups might want to use as well. Thus, the open-source &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fcode.google.com%2fp%2fgraffiti-usergroups%2f"&gt;Graffiti-UserGroups&lt;/a&gt; project was born.&lt;/p&gt;  &lt;p&gt;Basically &lt;a title="Torsten Weber"  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fblogs.compactframework.de%2fTorsten.Weber%2f" rel="friend"&gt;we&lt;/a&gt; wanted to provide a list of recent and archived events with custom metadata and enable attendee registration. Speaking of metadata, this includes:&lt;/p&gt;  &lt;p style="text-align: center"&gt;&lt;a title="Event Detail"  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fcontent%2fbinary%2fWindowsLiveWriter%2fGraffiti-UserGroups%2fEvent.png" rel="lightbox"&gt;&lt;img alt="Event Detail" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/Graffiti-UserGroups/Event-thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Start and end dates      &lt;ul&gt;       &lt;li&gt;and time, optionally &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Speaker &lt;/li&gt;    &lt;li&gt;Location      &lt;ul&gt;       &lt;li&gt;A default location should be set if no location was entered.&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Maximum number of attendees (due to space limitations)      &lt;ul&gt;       &lt;li&gt;Again, a default maximum should be set if no value was given.&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Registration recipient e-mail address      &lt;ul&gt;       &lt;li&gt;A default address should be used if no e-mail address was given. We sometimes host events in cooperation with the local &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fwww.studentprogram.de%2f"&gt;Microsoft Student Partners&lt;/a&gt; (MSPs) so the address can change for MSP events. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This enables some neat use cases:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Registration for one or more events using a web form without needing to write an e-mail. &lt;/li&gt;    &lt;li&gt;Automatic e-mails to the attendee and the event organizer. &lt;/li&gt;    &lt;li&gt;The notion of waiting lists for events that are booked up. &lt;/li&gt;    &lt;li&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fICalendar"&gt;iCalendar&lt;/a&gt; item downloads for Outlook that are created based on the metadata above. &lt;/li&gt; &lt;/ul&gt;  &lt;p style="text-align: center"&gt;&lt;a title="Registration Page"  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fcontent%2fbinary%2fWindowsLiveWriter%2fGraffiti-UserGroups%2fRegistration.png" rel="lightbox"&gt;&lt;img alt="Registration Page" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/Graffiti-UserGroups/Registration-thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;All functionality can be implemented using Graffiti's extensibility points, a &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fgraffiticms.com%2fsupport%2fadvanced-options%2fgraffiti-events%2f"&gt;plug-in&lt;/a&gt; in this case. A plug-in can subscribe to certain events in the application, jump in and modify data (see default values above). Another extensibility point which is heavily used in &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fcode.google.com%2fp%2fgraffiti-usergroups%2f"&gt;Graffiti-UserGroups&lt;/a&gt; is the notion of &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fgraffiticms.com%2fsupport%2fadvanced-options%2fextending-chalk%2f"&gt;custom &amp;quot;Chalk&amp;quot; macros&lt;/a&gt; compiled into .NET assemblies. For example, there's a set of macros to display and format event data without the need to write complex &amp;quot;standard&amp;quot; Chalk statements.&lt;/p&gt;  &lt;p&gt;An extra bonus for the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fcode.google.com%2fp%2fgraffiti-usergroups%2f"&gt;Graffiti-UserGroups&lt;/a&gt; newbie is the Demo Site Setup Wizard which configures your Graffiti site, including sample posts and a registration page. (Also see the video below where I demo the initial setup which is finished in minutes.)&lt;/p&gt;  &lt;p style="text-align: center"&gt;&lt;a title="Demo Site Setup Wizard"  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fcontent%2fbinary%2fWindowsLiveWriter%2fGraffiti-UserGroups%2fDemo-Site-Setup.png" rel="lightbox"&gt;&lt;img alt="Demo Site Setup Wizard" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/Graffiti-UserGroups/Demo-Site-Setup-thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To make a long story short(er) I've recorded a screencast that shows you how to set up the demo site quickly on your local machine.&lt;/p&gt;  &lt;p style="text-align: center"&gt;&lt;a title="Click to watch video"  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fdownload%2fGraffiti-UserGroups%2f"&gt;&lt;img alt="Click to watch video" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/Graffiti-UserGroups/Video.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Don't forget to take a look at the new &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fdotnet-leipzig.de%2f"&gt;.NET User Group Leipzig homepage&lt;/a&gt; to see the macros in action. Also check out the source code on &lt;a  href="http://www.therightstuff.de/ct.ashx?id=81832312-c253-4921-83e9-573271fcb8a2&amp;amp;url=http%3a%2f%2fcode.google.com%2fp%2fgraffiti-usergroups%2f"&gt;Google Code&lt;/a&gt;!&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=81832312-c253-4921-83e9-573271fcb8a2"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,81832312-c253-4921-83e9-573271fcb8a2.aspx</comments>
      <category>DNUG Leipzig</category>
      <category>Graffiti CMS</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F05%2F06%2FIntroducing%2BGraffitiUserGroups%2BFor%2BGraffiti%2BCMS.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/05/06/Introducing+GraffitiUserGroups+For+Graffiti+CMS.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=06848954-7cf5-4648-a170-ac54f31e891e</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,06848954-7cf5-4648-a170-ac54f31e891e.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,06848954-7cf5-4648-a170-ac54f31e891e.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=06848954-7cf5-4648-a170-ac54f31e891e</wfw:commentRss>
      <title>Batch Installing SharePoint Solution Deployment Packages (WSPs)</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,06848954-7cf5-4648-a170-ac54f31e891e.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/268582897/Batch+Installing+SharePoint+Solution+Deployment+Packages+WSPs.aspx</link>
      <pubDate>Fri, 11 Apr 2008 19:57:35 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Because I needed to install the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=06848954-7cf5-4648-a170-ac54f31e891e&amp;amp;url=http%3a%2f%2ftechnet.microsoft.com%2fen-us%2fwindowsserver%2fsharepoint%2fbb407286.aspx"&gt;20 free SharePoint Application Templates&lt;/a&gt; twice this week and Microsoft does not dare to include a batch installer... The batch below installs all *.wsp files in the current directory and deploys them immediately. Hopefully this saves you some time.&lt;/p&gt;&lt;pre&gt;@echo off
for %%f in (*.wsp) do (
    echo File %%f
    "%CommonProgramFiles%\Microsoft Shared\web server extensions\12\BIN\stsadm.exe" -o addsolution -filename "%%f"
    "%CommonProgramFiles%\Microsoft Shared\web server extensions\12\BIN\stsadm.exe" -o deploysolution -name "%%f" -allowgacdeployment -immediate -force
)

"%CommonProgramFiles%\Microsoft Shared\web server extensions\12\BIN\stsadm.exe" -o copyappbincontent
"%CommonProgramFiles%\Microsoft Shared\web server extensions\12\BIN\stsadm.exe" -o execadmsvcjobs
iisreset.exe
&lt;/pre&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=06848954-7cf5-4648-a170-ac54f31e891e"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,06848954-7cf5-4648-a170-ac54f31e891e.aspx</comments>
      <category>SharePoint</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F04%2F11%2FBatch%2BInstalling%2BSharePoint%2BSolution%2BDeployment%2BPackages%2BWSPs.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/04/11/Batch+Installing+SharePoint+Solution+Deployment+Packages+WSPs.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=4161c040-650d-498b-8335-0033fe341cec</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,4161c040-650d-498b-8335-0033fe341cec.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,4161c040-650d-498b-8335-0033fe341cec.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=4161c040-650d-498b-8335-0033fe341cec</wfw:commentRss>
      <title>Beilagen zum Steak</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,4161c040-650d-498b-8335-0033fe341cec.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/268582898/Beilagen+Zum+Steak.aspx</link>
      <pubDate>Fri, 11 Apr 2008 19:54:03 GMT</pubDate>
      <description>&lt;div&gt;&lt;ul&gt; &lt;li&gt;500 g Champignons  &lt;li&gt;100 g Mascarpone  &lt;li&gt;1 Zitrone  &lt;li&gt;Schnittlauch  &lt;li&gt;Salz, Pfeffer  &lt;li&gt;1-2 EL Butter &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Die Champignons putzen und in grobe Stücke schneiden. Die Butter in einer beschichteten Pfanne zergehen lassen und&amp;nbsp; die Pilze kurz und kräftig anbraten, sie dürfen nicht zu sehr zusammenschrumpfen und nur wenig Wasser verlieren. Die Mascarpone hinzugeben und schmelzen lassen. Mit Zitronensaft abschmecken, sodass ein leicht säuerliches Aroma entsteht. Salzen, Pfeffern und mit Schnittlauch garnieren.&lt;/p&gt; &lt;p&gt;Ebenfalls gut zu Steak passen &lt;a  href="http://www.therightstuff.de/ct.ashx?id=4161c040-650d-498b-8335-0033fe341cec&amp;amp;url=http%3a%2f%2fwww.chefkoch.de%2fforum%2f2%2c53%2c299180%2fMeine-IDEALE-Beilage-zu-Steak-gefunden.html"&gt;Kartoffeln mit Butter und Blauschimmelkäse&lt;/a&gt;.&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=4161c040-650d-498b-8335-0033fe341cec"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,4161c040-650d-498b-8335-0033fe341cec.aspx</comments>
      <category>Recipes (German)</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F04%2F11%2FBeilagen%2BZum%2BSteak.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/04/11/Beilagen+Zum+Steak.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=7456eb38-2b02-413b-af89-2cd306d8ae43</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,7456eb38-2b02-413b-af89-2cd306d8ae43.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,7456eb38-2b02-413b-af89-2cd306d8ae43.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=7456eb38-2b02-413b-af89-2cd306d8ae43</wfw:commentRss>
      <title>Debugging/Printing Custom NAnt Properties When Building A Project</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,7456eb38-2b02-413b-af89-2cd306d8ae43.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/249078883/DebuggingPrinting+Custom+NAnt+Properties+When+Building+A+Project.aspx</link>
      <pubDate>Mon, 10 Mar 2008 20:06:11 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;A while ago, after reading &lt;a  href="http://www.therightstuff.de/ct.ashx?id=7456eb38-2b02-413b-af89-2cd306d8ae43&amp;amp;url=http%3a%2f%2fwww.jpboodhoo.com%2fblog%2fNAntStarterSeries.aspx"&gt;Jean-Paul Boodhoo's excellent NAnt starter series&lt;/a&gt;, I switched my builds to &lt;a  href="http://www.therightstuff.de/ct.ashx?id=7456eb38-2b02-413b-af89-2cd306d8ae43&amp;amp;url=http%3a%2f%2fnant.sourceforge.net%2f"&gt;NAnt&lt;/a&gt; (before I had just used VS to build). After a couple of hours of figuring out how to organize the structure of the build script, I was delighted how easy it could be to build whole Visual Studio solutions on the command line. NAnt also makes the development environment a lot easier to manage (and more fun) in regard to different configurations on the developer machine vs. test and production. Several projects come to mind in which I would have loved to use NAnt for a better experience when working in a team of developers.&lt;/p&gt; &lt;p&gt;NAnt allows us to apply different settings (think of a database connection string) for various environments and configurations, for which it relies heavily on the easy to grasp &lt;a  href="http://www.therightstuff.de/ct.ashx?id=7456eb38-2b02-413b-af89-2cd306d8ae43&amp;amp;url=http%3a%2f%2fnant.sourceforge.net%2frelease%2flatest%2fhelp%2ffundamentals%2fproperties.html"&gt;concept of properties&lt;/a&gt;. Properties may be defined anywhere within a NAnt project file, but I like to keep them separate in a file called &lt;strong&gt;default.properties&lt;/strong&gt;, which might look like this:&lt;/p&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://nant.sf.net/release/0.86-beta1/nant.xsd&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;db.connectionstring&lt;/span&gt;"
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Data Source=CRM03; Integrated Security=true&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;In the contrived example above, there is one property defined, &lt;code&gt;db.connectionstring&lt;/code&gt;. A developer might want to use another database name on his machine, so he creates another properties file, &lt;strong&gt;local.properties&lt;/strong&gt;, which is loaded by the build script and overwrites the default value of &lt;code&gt;db.connectionstring&lt;/code&gt;.&lt;/p&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://nant.sf.net/release/0.86-beta1/nant.xsd&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;db.connectionstring&lt;/span&gt;"
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Data Source=CRM_Database; Integrated Security=true&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;The build script loading both files (in case they exists):&lt;/p&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Project&lt;/span&gt;"
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;default&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;all&lt;/span&gt;"
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://nant.sf.net/release/0.86-beta1/nant.xsd&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- &lt;/span&gt;&lt;span style="color: green"&gt;Load default configuration. &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;test&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;${file::exists('default.properties')}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;echo&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;message&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Loading default.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;include&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;buildfile&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;default.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; Load developer-specific configuration. &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;test&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;${file::exists('local.properties')}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;echo&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;message&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Loading local.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;include&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;buildfile&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;local.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Read more about this concept in &lt;a  href="http://www.therightstuff.de/ct.ashx?id=7456eb38-2b02-413b-af89-2cd306d8ae43&amp;amp;url=http%3a%2f%2fwww.jpboodhoo.com%2fblog%2fAutomatingYourBuildsWithNAntPart6.aspx"&gt;part 6 of Jean-Paul's series&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The interesting part is now how to output the properties when you run a build. It's easy to print property values using NAnt's built-in &lt;a  href="http://www.therightstuff.de/ct.ashx?id=7456eb38-2b02-413b-af89-2cd306d8ae43&amp;amp;url=http%3a%2f%2fnant.sourceforge.net%2frelease%2flatest%2fhelp%2ftasks%2fecho.html"&gt;&amp;lt;echo&amp;gt; task&lt;/a&gt;:&lt;/p&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Project&lt;/span&gt;"
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;default&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;all&lt;/span&gt;"
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://nant.sf.net/release/0.86-beta1/nant.xsd&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- &lt;/span&gt;&lt;span style="color: green"&gt;Load default configuration. &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;test&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;${file::exists('default.properties')}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;echo&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;message&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Loading default.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;include&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;buildfile&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;default.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; Load developer-specific configuration. &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;test&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;${file::exists('local.properties')}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;echo&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;message&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Loading local.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;include&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;buildfile&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;local.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;echo&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;message&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Build configuration:&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;echo&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;message&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;db.connectionstring: ${db.connectionstring}&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;br&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;In a larger project the NAnt properties file might grow pretty quick, depending on how many aspects of the system are dependent on environment specifics or build configurations. If you have 25 properties, it becomes a hassle to write an echo task for each of them. Also, when adding a new property, the developer has to remember to add the corresponding echo task.&lt;/p&gt;
&lt;p&gt;The NAnt &lt;a  href="http://www.therightstuff.de/ct.ashx?id=7456eb38-2b02-413b-af89-2cd306d8ae43&amp;amp;url=http%3a%2f%2fnant.sourceforge.net%2frelease%2flatest%2fhelp%2ftasks%2fscript.html"&gt;&amp;lt;script&amp;gt; task&lt;/a&gt; comes in handy here, which allows us to iterate through all properties and print them using an echo task we create on the fly. Note that we also get back NAnt's own properties starting with "nant.", which will be excluded from the output.&lt;/p&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Project&lt;/span&gt;"
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;default&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;all&lt;/span&gt;"
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://nant.sf.net/release/0.86-beta1/nant.xsd&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; Load default configuration. &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;test&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;${file::exists('default.properties')}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;echo&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;message&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Loading default.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;include&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;buildfile&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;default.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&amp;nbsp;&lt;br&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; Load developer-specific configuration. &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;test&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;${file::exists('local.properties')}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;echo&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;message&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Loading local.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;include&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;buildfile&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;local.properties&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;if&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&amp;nbsp;&lt;br&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;echo&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;message&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Build configuration:&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;language&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;C#&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;code&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;![CDATA[&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void ScriptMain(Project project)&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Collections.Generic.SortedDictionary&amp;lt;string, string&amp;gt; sortedByKey = new System.Collections.Generic.SortedDictionary&amp;lt;string, string&amp;gt;();&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach(DictionaryEntry de in project.Properties)&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sortedByKey.Add(de.Key.ToString(), de.Value.ToString());&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;br&gt;&lt;span style="color: gray"&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAnt.Core.Tasks.EchoTask echo = new NAnt.Core.Tasks.EchoTask();&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo.Project = project;&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach(System.Collections.Generic.KeyValuePair&amp;lt;string, string&amp;gt; kvp in sortedByKey)&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(kvp.Key.StartsWith("nant."))&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&amp;nbsp; &lt;br&gt; &lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo.Message = String.Format("{0}: {1}", kvp.Key, kvp.Value);&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo.Execute();&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;]]&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;code&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=7456eb38-2b02-413b-af89-2cd306d8ae43"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,7456eb38-2b02-413b-af89-2cd306d8ae43.aspx</comments>
      <category>Build</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F03%2F10%2FDebuggingPrinting%2BCustom%2BNAnt%2BProperties%2BWhen%2BBuilding%2BA%2BProject.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/03/10/DebuggingPrinting+Custom+NAnt+Properties+When+Building+A+Project.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=eb599775-94c7-4dee-a763-7395f40fcf08</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,eb599775-94c7-4dee-a763-7395f40fcf08.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,eb599775-94c7-4dee-a763-7395f40fcf08.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=eb599775-94c7-4dee-a763-7395f40fcf08</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>General Considerations For Securing Windows Servers On The Internet (And Anywhere Else)</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,eb599775-94c7-4dee-a763-7395f40fcf08.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/231689602/General+Considerations+For+Securing+Windows+Servers+On+The+Internet+And+Anywhere+Else.aspx</link>
      <pubDate>Fri, 08 Feb 2008 16:04:26 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;By now there are a couple of Windows Servers that I actively manage, or, in the case of projects, I touched while moving the project forward. Most of these servers have an Internet connection. Since I've been asked how to make servers more secure and manageable, here are a couple of management rules I applied. Consider it a checklist.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Use a firewall and configure it accordingly.  &lt;li&gt;Enable automatic Windows Updates and upgrade to &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fupdate.microsoft.com%2f"&gt;Microsoft Update&lt;/a&gt; to receive updates of other Microsoft products like SQL Server.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Okay, the two above should have been obvious.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Keep the machine clean.&lt;br&gt;&lt;/strong&gt;Don't install any unnecessary software and don't leave any temporary files on the server. I've seen certificate requests lingering on drive C: and "test" folder remnants. A clean system might reveal hacker activity early in case &lt;em&gt;they&lt;/em&gt; leave unfamiliar files behind.  &lt;li&gt;&lt;strong&gt;Leverage the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fPrinciple_of_least_privilege"&gt;principle of least privilege&lt;/a&gt;.&lt;br&gt;&lt;/strong&gt;All users and service accounts should only have the minimum rights they need. Configure the file system such that system services can only access the files and folders they are in charge of. Typical example: &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2f2006%2f01%2f23%2fRunning%2bSQL%2bServer%2b2000%2bWith%2bLimited%2bRights.aspx"&gt;Use a dedicated service account for SQL Server.&lt;/a&gt; (Setting this up on SQL 2005 is even more simple.)  &lt;li&gt;&lt;strong&gt;Rename the Administrator account.&lt;br&gt;&lt;/strong&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fdotnetwizard.net%2f%3fp%3d296"&gt;Rename the Administrator account&lt;/a&gt; and make it match your preferred user naming scheme (i. e. &lt;em&gt;agross&lt;/em&gt;). You might apply this to your whole organization if you use Active Directory. This is another hurdle to guess the Administrator account from a list of user accounts and works good with account lockout enabled (see below).  &lt;li&gt;&lt;strong&gt;Create a new "Administrator" account&lt;br&gt;&lt;/strong&gt;and give it a very strong throw-away password. I typically use two or three concatenated &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fGUID"&gt;GUIDs&lt;/a&gt; that I immediately forget. Disallow this user to change his password, remove all group memberships and disable the account.  &lt;li&gt;&lt;strong&gt;Audit the hell out of the machine.&lt;br&gt;&lt;/strong&gt;Windows uses the Security event log to record security-related events. &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2ftechnet%2fsecurity%2fguidance%2fserversecurity%2ftcg%2ftcgch03n.mspx"&gt;Configure auditing&lt;/a&gt; using &lt;strong&gt;secpol.msc&lt;/strong&gt; and enable success and failure logging at least for  &lt;ul&gt; &lt;li&gt;Account logon events,  &lt;li&gt;Logon events and  &lt;li&gt;Policy change.&lt;/li&gt;&lt;/ul&gt;The last option is for tracking changes to the policy you just set.  &lt;li&gt;&lt;strong&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2ftechnet%2fsecurity%2fguidance%2fserversecurity%2ftcg%2ftcgch02n.mspx%23EED"&gt;Enable complexity criteria for passwords and account lockout.&lt;/a&gt;&lt;br&gt;&lt;/strong&gt;To be found in the same MMC snap-in as above. For account lockout I often go with the default values of 5 attempts and 30 minutes of threshold and duration.  &lt;li&gt;&lt;strong&gt;Deactivate file sharing/Microsoft Networking on the WAN connection.&lt;br&gt;&lt;/strong&gt;Because it's most likely unneeded.  &lt;li&gt;&lt;strong&gt;Secure RDP sessions using a certificate.&lt;/strong&gt;&lt;br&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fblogs.compactframework.de%2fTorsten.Weber%2f" rel="friend met"&gt;Torsten&lt;/a&gt; has a nice write-up on how to leverage SSL to secure the RDP handshaking/authentication phase to overcome &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fMan_in_the_middle"&gt;man-in-the-middle&lt;/a&gt; and &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fARP_Spoofing"&gt;ARP spoofing&lt;/a&gt; attacks. His article is available in German only so here's two-sentence recap: On the server's RDP security tab, enable SSL and choose the same certificate you use for HTTPS encryption. On the client side, enable server authentication.  &lt;li&gt;&lt;strong&gt;Extra: Allow RDP sessions only from white-listed workstations.&lt;br&gt;&lt;/strong&gt;For a server that was hacked a while ago using an ARP spoofing attack (see bullet above) I wrote a &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fwindowsserver2003%2ftechnologies%2fmanagement%2fpowershell%2fdefault.mspx"&gt;Powershell&lt;/a&gt; script forces RDP session to originate from a list of known workstations. Each RDP user can have multiple allowed workstations. If a logon attempt occurs from another machine that RDP session is killed immediately.&lt;br&gt;&lt;pre&gt;#
# Alert.ps1
#
# Logon script for users with known RDP client names.
#

# Array of users with known workstations.
$userWorkstations = @{
	"user1" = @("VALIDCOMPUTERNAME1", "VALIDCOMPUTERNAME2")
	"user2" = @("VALIDCOMPUTERNAME3")
	}

# Logoff executable.
$logoffCommand = $Env:SystemRoot + "\system32\logoff.exe"

# Trim the user name.
$currentUser = $Env:UserName.Trim()

# Cancel if a user that's not contained in $userWorkstations logs on.
if ($userWorkstations.Keys -inotcontains $currentUser)
{
	return
}

# Send alert e-mail and log off if the user logs on from an unknown workstation.
if ($userWorkstations[$currentUser] -inotcontains $Env:ClientName.Trim())
{
	$subject = $("Unknown RDP client '{0}' for user '{1}'" -f $Env:ClientName.Trim(), $currentUser)

	$message = New-Object System.Net.Mail.MailMessage
	$message.From = "alerts@example.com"
	$message.To.Add("admin1@example.com")
	$message.To.Add("admin2@example.com")

	$message.IsBodyHtml = $false
	$message.Priority = [System.Net.Mail.MailPriority]::High
	$message.Subject = $subject
	$message.Body = $subject

	$smtp = New-Object System.Net.Mail.SmtpClient
	$smtp.Host = "localhost"
	$smtp.Send($message)

	# Force logoff.
	&amp;amp;$logoffCommand
}&lt;/pre&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2ftechnet2.microsoft.com%2fWindowsServer%2fen%2fLibrary%2f22cf660f-c165-49e3-b768-2b8898a5684b1033.mspx%3fmfr%3dtrue"&gt;Set the script as a logon script for your users&lt;/a&gt; using the &lt;strong&gt;Alert.cmd&lt;/strong&gt; helper script below.&lt;pre&gt;rem Alert.cmd - runs the Alert.ps1 Powershell script.
@powershell.exe -noprofile -command .\Alert.ps1&lt;/pre&gt;
&lt;li&gt;&lt;strong&gt;Enable SQL Server integrated authentication.&lt;/strong&gt;&lt;br&gt;I don't see a need for SQL Server Authentication in most scenarios, especially if you're running/hosting .NET applications. However, in some projects I've worked on there seems to be a tendency towards SQL Server Authentication for no special reason. 
&lt;li&gt;&lt;strong&gt;Configure IIS log detail and directories.&lt;br&gt;&lt;/strong&gt;I tend to enable full IIS logs, that is, all information regarding a request should be logged. Also, I like my logs residing in "speaking" folders, so instead of &lt;strong&gt;%windir%\system32\LogFiles\W3SVC&amp;lt;Some number&amp;gt;&lt;/strong&gt; they should be placed in &lt;strong&gt;%windir%\system32\LogFiles\IIS &amp;lt;Site name&amp;gt;\W3SVC&amp;lt;Some number&amp;gt;&lt;/strong&gt;. This makes it easy to find the logs you're interested in. 
&lt;li&gt;&lt;strong&gt;Use &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fde.wikipedia.org%2fwiki%2fSSH"&gt;SSH&lt;/a&gt; to connect remotely.&lt;br&gt;&lt;/strong&gt;There's a little &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.freesshd.com%2f"&gt;free SSH server&lt;/a&gt; out there that should fit most user's needs. Besides a secure shell environment &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.freesshd.com%2f"&gt;freeSSHd&lt;/a&gt; offers SFTP and port tunneling capabilities to &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2f2006%2f11%2f21%2fSupporting%2bUsers%2bOver%2bThe%2bInternet%2bOvercoming%2bFirewalled%2bNetworks.aspx"&gt;tunnel insecure protocols&lt;/a&gt;. Authentication works natively against Windows accounts. 
&lt;li&gt;&lt;strong&gt;Deploy a server monitoring tool.&lt;br&gt;&lt;/strong&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2f2007%2f04%2f06%2fMonitoring%2bServers.aspx"&gt;I like to use&lt;/a&gt; the free &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2foss.oetiker.ch%2fmrtg%2f"&gt;MRTG&lt;/a&gt; tool, of course any other tool allowing you quickly view any uncommon activity to will do. 
&lt;li&gt;&lt;strong&gt;Use a dedicated management network interface, if possible.&lt;br&gt;&lt;/strong&gt;You should configure strict firewall rules for that interface. Allow access only from a known management subnet.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;What rules do you apply to make your servers more secure and manageable?&lt;/p&gt;
&lt;p class="now-playing"&gt;Now Playing [&lt;a title="Insert Now Playing Into Your Own Blog Posts"  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fProjects%2fNowPlaying%2f" rel="previewlink"&gt;?&lt;/a&gt;]: &lt;a title="Display relations of Morcheeba to other artists"  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.music-map.de%2fmorcheeba.html"&gt;Morcheeba&lt;/a&gt; – &lt;a title="Display Amazon page of the Dive Deep album"  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.amazon.com%2fexec%2fobidos%2fASIN%2fB0011HF6B4%2ftherightstu0e-20"&gt;Dive Deep&lt;/a&gt; – &lt;a title="Preview Enjoy the ride (feat. Judy Tzuke) on Last.fm"  href="http://www.therightstuff.de/ct.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08&amp;amp;url=http%3a%2f%2fwww.last.fm%2fmusic%2fMorcheeba%2f_%2fEnjoy%2bthe%2bride%2b(feat.%2bJudy%2bTzuke)%2f"&gt;Enjoy the ride (feat. Judy Tzuke)&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=eb599775-94c7-4dee-a763-7395f40fcf08"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,eb599775-94c7-4dee-a763-7395f40fcf08.aspx</comments>
      <category>IIS</category>
      <category>Networking</category>
      <category>PowerShell</category>
      <category>Security</category>
      <category>SQL Server</category>
      <category>Windows</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F02%2F08%2FGeneral%2BConsiderations%2BFor%2BSecuring%2BWindows%2BServers%2BOn%2BThe%2BInternet%2BAnd%2BAnywhere%2BElse.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/02/08/General+Considerations+For+Securing+Windows+Servers+On+The+Internet+And+Anywhere+Else.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=398bd421-1983-4d58-91e3-8d45de559e74</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,398bd421-1983-4d58-91e3-8d45de559e74.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,398bd421-1983-4d58-91e3-8d45de559e74.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=398bd421-1983-4d58-91e3-8d45de559e74</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Reconfiguring Team Foundation Server URLs</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,398bd421-1983-4d58-91e3-8d45de559e74.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/230476338/Reconfiguring+Team+Foundation+Server+URLs.aspx</link>
      <pubDate>Wed, 06 Feb 2008 19:15:25 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Microsoft's solution to integrated software project management, the Team Foundation Server product, offers a lot of services. Beyond Source Control they have a work item tracking, build services and reporting in stock (I suspect there is even more functionality under the hood). You might be tempted to think that such an "all-in-one" solution can become complex to manage pretty soon. Let me tell you, it does! A couple of months ago I set up a Team Foundation Server (beta 2) for a project some friends of mine do for Microsoft (you will hear of it, I promise).&lt;/p&gt; &lt;p&gt;The server was initially installed as a virtual machine on our &lt;a  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2f2006%2f06%2f23%2fAlive%2bAnd%2bKicking%2bAgain.aspx"&gt;pretty decent server&lt;/a&gt; connected to the DSL line at home. The installation alone took me a week to complete since there was a bug in some XML file that made Visual Studio 2005 misinterpret the file's contents. (I don't remember exactly the source of the problem.) It was quite a hassle to get my first &lt;abbr title="Team Foundation Server"&gt;TFS&lt;/abbr&gt; project created.&lt;/p&gt; &lt;p&gt;The project hosted on that server went well, but it became pretty soon obvious that the team needed more resources in respect to bandwidth and virtual machines for testing the application they build. That's something we could not handle with our 640 kbit/s upload bandwidth and 1,5 GBs of RAM in the server. We moved the TFS virtual machine to another physical machine (more RAM) and hooked it up to the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fwww.wifa.uni-leipzig.de%2f"&gt;University&lt;/a&gt; network (lots of free bandwidth).&lt;/p&gt; &lt;p&gt;After moving the server we found that new projects could not be created due to one misconfigured Team System service URL, i. e. that service could be accessed on the home network (think &lt;a  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2ftfs%2f"&gt;http://tfs/&lt;/a&gt;) but not over the Internet. Specifically it was the URL to the SharePoint Central Administration Web Site, but that doesn't actually matter. I checked TFS' Registration Service to see if the corrected URL has been applied. The Registration Service URL looks like this:&lt;/p&gt;&lt;pre&gt;http://&amp;lt;TFS Server&amp;gt;:&amp;lt;Port&amp;gt;/Services/v1.0/Registration.asmx&lt;/pre&gt;
&lt;p style="text-align: center"&gt;&lt;a title="Registration Service"  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fcontent%2fbinary%2fWindowsLiveWriter%2fReconfiguringTFS%2fRegistration-Service.png" rel="lightbox"&gt;&lt;img alt="Registration Service" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/ReconfiguringTFS/Registration-Service-small.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;WssAdminService&lt;/code&gt; has a publicy known URL. Good to go! I tried creating a new project, but received that same error as before.&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;a title="Project Creation Failed"  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fcontent%2fbinary%2fWindowsLiveWriter%2fReconfiguringTFS%2fProject-Creation-Failed.png" rel="lightbox"&gt;&lt;img alt="Project Creation Failed" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/ReconfiguringTFS/Project-Creation-Failed-small.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The error message above is a bit misleading because the Team Foundation Client did not try to connect to &lt;em&gt;tfs.therightstuff.de&lt;/em&gt;, but rather to the (old) &lt;em&gt;tfs&lt;/em&gt; server, as &lt;a  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fwww.fiddler2.com%2f"&gt;Fiddler&lt;/a&gt; revealed.&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;img alt="Team Foundation Client Connects To The Wrong URL" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/ReconfiguringTFS/Wrong-URL.png"&gt;&lt;/p&gt;
&lt;p&gt;Looking through the other HTTP requests originating from Visual Studio's Team Foundation Client I found that the Registration Service has never been queried to get the updated service URLs. On &lt;a  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fbuckh%2f"&gt;Buck Hodges' blog&lt;/a&gt; I found a &lt;a  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fbuckh%2farchive%2f2005%2f12%2f12%2f503015.aspx"&gt;hint&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When a client app, such as tf.exe, VS, or your own custom application, needs to use version control, the TF client code must request the service definition from registration service on the server.&amp;nbsp; &lt;strong&gt;To avoid constantly requesting service registration information that rarely changes, the client-side registration code maintains a cache and only makes the server call when the cache is out of date.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Whatever it means that the client re-requests that piece of information &lt;em&gt;when it's out of date&lt;/em&gt;. On my machine the Team Foundation cache mentioned above is located at the folder&lt;/p&gt;&lt;pre&gt;C:\Users\&amp;lt;User name&amp;gt;\AppData\Local\Microsoft\Team Foundation\2.0\Cache\&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;I wiped the cache folder and, just to make sure, I also deleted the TFS server registration in Visual Studio.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After re-adding the TFS server in Visual Studio I can now create new Team Foundation projects. Wow!&lt;/p&gt;
&lt;p class="now-playing"&gt;Now Playing [&lt;a title="Insert Now Playing Into Your Own Blog Posts"  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fProjects%2fNowPlaying%2f" rel="previewlink"&gt;?&lt;/a&gt;]: &lt;a title="Display relations of The Cinematic Orchestra to other artists"  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fwww.music-map.de%2fcinematic%2borchestra.html"&gt;The Cinematic Orchestra&lt;/a&gt; – &lt;a title="Display Amazon page of the Horizon album"  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fwww.amazon.com%2fexec%2fobidos%2fASIN%2fB00006IQLJ%2ftherightstu0e-20"&gt;Horizon&lt;/a&gt; – &lt;a title="Preview Oregon on Last.fm"  href="http://www.therightstuff.de/ct.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74&amp;amp;url=http%3a%2f%2fwww.last.fm%2fmusic%2fThe%2bCinematic%2bOrchestra%2f_%2fOregon%2f"&gt;Oregon&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=398bd421-1983-4d58-91e3-8d45de559e74"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,398bd421-1983-4d58-91e3-8d45de559e74.aspx</comments>
      <category>Visual Studio</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F02%2F06%2FReconfiguring%2BTeam%2BFoundation%2BServer%2BURLs.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/02/06/Reconfiguring+Team+Foundation+Server+URLs.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=f77f0f55-4390-4f61-99e9-07e272daaad5</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,f77f0f55-4390-4f61-99e9-07e272daaad5.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,f77f0f55-4390-4f61-99e9-07e272daaad5.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=f77f0f55-4390-4f61-99e9-07e272daaad5</wfw:commentRss>
      <title>The Case Of The Giant SQL Server Log Files</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,f77f0f55-4390-4f61-99e9-07e272daaad5.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/226033474/The+Case+Of+The+Giant+SQL+Server+Log+Files.aspx</link>
      <pubDate>Wed, 30 Jan 2008 18:10:32 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;The day before yesterday I had to look into a SQL Server 2005 (Service Pack 2) instance where the daily backups of a certain database amounted to several Gigabytes over the last 14 days. The database in question is only about 10 MB in size and the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=f77f0f55-4390-4f61-99e9-07e272daaad5&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2ftechnet%2fprodtechnol%2fsql%2f2000%2fmaintain%2fsqlbackuprest.mspx%23ERG"&gt;recovery model&lt;/a&gt; is set to &amp;quot;Simple&amp;quot; so that should not be the case. The problem was a giant log file, around 6 GB in size by the time I started the remote session.&lt;/p&gt;  &lt;p&gt;First I tried shrinking the database and the logs via the &lt;em&gt;Context Menu, Tasks, Shrink Database&lt;/em&gt; options, but shrinking the log file failed miserably: it would not decrease below a magic threshold of 5,5 GB. Shrinking even should not free that much disk space because SQL Server shrinks the logs automatically after a transaction is committed when the recovery model is set to &amp;quot;Simple&amp;quot;.&lt;/p&gt;  &lt;p&gt;After a while of trial and error I realized that there must be some open transaction that has not been committed or otherwise been marked as done. &lt;strong&gt;But how to finally get rid of it?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First I tried to change the recover model to &amp;quot;Full&amp;quot; and &amp;quot;Bulk-logged&amp;quot;, backing up the database and the logs separately.&lt;/p&gt;  &lt;pre&gt;&lt;span style="color: blue"&gt;BACKUP DATABASE &lt;/span&gt;database &lt;span style="color: blue"&gt;TO DISK&lt;/span&gt;=&lt;span style="color: #a31515"&gt;'C:\Temp\file_data.bak' &lt;/span&gt;&lt;span style="color: blue"&gt;WITH &lt;/span&gt;NO_LOG
&lt;span style="color: blue"&gt;BACKUP LOG &lt;/span&gt;database &lt;span style="color: blue"&gt;TO DISK&lt;/span&gt;=&lt;span style="color: #a31515"&gt;'C:\Temp\file_log.bak'&lt;/span&gt;

Processed 1000 pages for database 'database', file 'database_Data' on file 2.
BACKUP DATABASE...FILE=&lt;name&gt; successfully processed 1000 pages in 0.434 seconds (18.875 MB/sec).

Processed 807822 pages for database 'database', file 'database_Log' on file 3.
&lt;span style="color: red"&gt;The log was not truncated because records at the beginning of the log are pending replication. Ensure the Log Reader Agent is running or use sp_repldone to mark transactions as distributed.&lt;/span&gt;
BACKUP LOG successfully processed 807822 pages in 15.077 seconds (48.119 MB/sec).&lt;/pre&gt;

&lt;p&gt;As you can see from the messages above the shrink operation could not shrink the whole log file. The hint to use &lt;code&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=f77f0f55-4390-4f61-99e9-07e272daaad5&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fms173775.aspx"&gt;sp_repldone&lt;/a&gt;&lt;/code&gt; is a bit misguiding because the database isn't replicated. In fact, the replication components aren't even installed on the server. As expected, executing &lt;code&gt;sp_repldone&lt;/code&gt; fails:&lt;/p&gt;

&lt;pre&gt;&lt;span style="color: blue"&gt;EXEC &lt;/span&gt;sp_repldone @xactid = &lt;span style="color: blue"&gt;NULL&lt;/span&gt;, @xact_segno = &lt;span style="color: blue"&gt;NULL&lt;/span&gt;, @numtrans = 0, @time = 0, @reset = 1

Msg 18757, Level 16, State 1, Procedure sp_repldone, Line 1
Unable to execute procedure. The database is not published. Execute the procedure in a database that is published for replication.&lt;/pre&gt;

&lt;p&gt;I digged the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=f77f0f55-4390-4f61-99e9-07e272daaad5&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fms130214.aspx"&gt;SQL Server Books Online&lt;/a&gt; for more information. First of all there's a command to find out about open transactions: &lt;code&gt;&lt;a  href="http://www.therightstuff.de/ct.ashx?id=f77f0f55-4390-4f61-99e9-07e272daaad5&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fms182792.aspx"&gt;DBCC OPENTRAN&lt;/a&gt;&lt;/code&gt;. As you can see there's at least one transaction that hasn't been replicated.&lt;/p&gt;

&lt;pre&gt;&lt;span style="color: blue"&gt;DBCC OPENTRAN&lt;/span&gt;

...
Replicated Transaction Information:
   Oldest distributed LSN     : (0:0:0)
   &lt;span style="color: red"&gt;Oldest non-distributed LSN : (3822:331:1)&lt;/span&gt;
   DBCC execution completed. If DBCC printed error messages, contact your system administrator.&lt;/pre&gt;

&lt;p&gt;At least, it was the hint that finally solved the issue: There's a transaction that SQL Server thinks should be distributed to a replicated server, although there is none configured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fortunately, there's a stored procedure that can be used to disable replication, even if it wasn't enabled in the first place.&lt;/strong&gt; I suspect &lt;code&gt;&lt;a href="sp_removedbreplication "&gt;sp_removedbreplication&lt;/a&gt;&lt;/code&gt; cleans up some bogus settings, at least it was able to remove the transaction that kept the log file steady at 5,5 GB.&lt;/p&gt;

&lt;p&gt;Two hours later: Problem solved!&lt;/p&gt;

&lt;p class="now-playing"&gt;Now Playing [&lt;a title="Insert Now Playing Into Your Own Blog Posts"  href="http://www.therightstuff.de/ct.ashx?id=f77f0f55-4390-4f61-99e9-07e272daaad5&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fProjects%2fNowPlaying%2f" rel="previewlink"&gt;?&lt;/a&gt;]: Ocker &amp;#8211; Public Transport &amp;#8211; &lt;a title="Preview Last night the secret service saved my life on Last.fm"  href="http://www.therightstuff.de/ct.ashx?id=f77f0f55-4390-4f61-99e9-07e272daaad5&amp;amp;url=http%3a%2f%2fwww.last.fm%2fmusic%2fOcker%2f_%2fLast%2bnight%2bthe%2bsecret%2bservice%2bsaved%2bmy%2blife%2f"&gt;Last night the secret service saved my life&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=f77f0f55-4390-4f61-99e9-07e272daaad5"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,f77f0f55-4390-4f61-99e9-07e272daaad5.aspx</comments>
      <category>SQL Server</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F01%2F30%2FThe%2BCase%2BOf%2BThe%2BGiant%2BSQL%2BServer%2BLog%2BFiles.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/01/30/The+Case+Of+The+Giant+SQL+Server+Log+Files.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,e20b4717-da5d-4fd1-a3bc-8ce7ec17b236.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,e20b4717-da5d-4fd1-a3bc-8ce7ec17b236.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236</wfw:commentRss>
      <title>Siemens Gigaset QuickSync on Vista x64</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,e20b4717-da5d-4fd1-a3bc-8ce7ec17b236.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/219426488/Siemens+Gigaset+QuickSync+On+Vista+X64.aspx</link>
      <pubDate>Sat, 19 Jan 2008 15:12:43 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;img title="Siemens Gigaset SL 370" alt="Siemens Gigaset SL 370" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/SiemensGigasetQuickSynconVistax64_C900/SL370_a88e78d4-81fe-4af6-a537-5c13bbfcee4b.jpg" style="float: right; margin-left: 1em; margin-bottom: 1em;" /&gt;I recently purchased the Siemens Gigaset SL 370 phone for home telecommunications. The SL 370 is Siemens' premier DECT phone with a form factor comparable to mobile phones. It has plenty of advanced features, the most appealing one being Bluetooth support for headsets and, more importantly, syncing abilities with Outlook contacts. That is, you can sync your Windows Vista Contacts folder or Outlook contacts wirelessly over a Bluetooth connection.&lt;/p&gt;  &lt;p&gt;On the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236&amp;amp;url=http%3a%2f%2fgigaset.siemens.com%2fshc%2f0%2c1935%2cde_de_0_138448_rArNrNrNrN_variation%25253A-5_pageType%25253Adownloads_imagePos%25253A0%2c00.html%23content"&gt;SL 370 product support site&lt;/a&gt; there's a download option for the Gigaset QuickSync software needed for synchronizing the contact stores on your computer and the handset device. The software version I'm using is the current version 2.0 which needs the .NET Framework 2.0 to run (which is a good thing, see below).&lt;/p&gt;  &lt;p&gt;The SL 370 is a great piece of hardware, good sound quality, very light, well thought out and with outstanding battery life.&lt;/p&gt;  &lt;p&gt;However, there are some issues with the QuickSync software with Outlook 2007:&lt;/p&gt;  &lt;h3&gt;Gigaset QuickSync refuses to run on x64 versions of Windows Vista &lt;/h3&gt;  &lt;p&gt;After launching QuickSync on Vista x64, Windows instantly shows the generic &amp;quot;Program stopped working&amp;quot; dialog. &lt;/p&gt;  &lt;p style="text-align: center"&gt;&lt;img title="Gigaset QuickSync stopped working" alt="Gigaset QuickSync stopped working" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/SiemensGigasetQuickSynconVistax64_C900/Gigaset%20QuickSync%20stopped%20working_74403591-4c3b-49ff-8db5-97bf1db73380.png" /&gt;&lt;/p&gt;  &lt;p&gt;After clicking the &amp;quot;Debug&amp;quot; button Visual Studio starts up revealing that an assembly of the Gigaset QuickSync package refused to load. When the application's main executable (&lt;strong&gt;GigasetQuickSync.exe&lt;/strong&gt;) tries loading &lt;strong&gt;PCABManager.dll&lt;/strong&gt; a &lt;a  href="http://www.therightstuff.de/ct.ashx?id=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.badimageformatexception(VS.80).aspx"&gt;&lt;code&gt;BadImageFormatException&lt;/code&gt;&lt;/a&gt; is thrown.&lt;/p&gt;  &lt;p style="text-align: center"&gt;&lt;img title="BadImageFormatException" alt="BadImageFormatException" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/SiemensGigasetQuickSynconVistax64_C900/BadImageFormatException_2b109d45-3f6b-4fa2-a9e1-b8c1deaf4e89.png" /&gt; &lt;/p&gt;  &lt;p&gt;As one can glimpse from the screenshot above the &lt;strong&gt;PCABManager.dll&lt;/strong&gt; assembly is not strong named (&lt;em&gt;PublicKeyToken=null&lt;/em&gt;), so I could leverage some of the .NET Framework SDK tools to make QuickSync behave on Vista x64.&lt;/p&gt;  &lt;p&gt;Open up a Visual Studio Command Prompt and run &lt;strong&gt;corflags.exe&lt;/strong&gt; on the &lt;strong&gt;GigasetQuickSync.exe&lt;/strong&gt; and &lt;strong&gt;PCABManager.dll&lt;/strong&gt; assemblies. &lt;/p&gt;  &lt;pre&gt;corflags /32bit+ GigasetQuickSync.exe
corflags /32bit+ PCABManager.dll&lt;/pre&gt;

&lt;p&gt;The 32-bitness flags should be set afterwards &lt;/p&gt;

&lt;pre&gt;&amp;gt;corflags GigasetQuickSync.exe
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  3.5.21022.8
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 1
ILONLY    : 1
32BIT     : &lt;strong&gt;1&lt;/strong&gt;
Signed    : 0&lt;/pre&gt;

&lt;p&gt;This resolves the load errors on Vista x64 as we now force the 32-bit .NET Framework runtime to load. &lt;a  href="http://www.therightstuff.de/ct.ashx?id=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236&amp;amp;url=http%3a%2f%2fwww.hanselman.com%2fblog%2f32bitnessAnd64bitnessAndMigratingDasBlogOnIIS7AndASPNETUnderVista64.aspx"&gt;More technical details&lt;/a&gt; can be found on Scott Hanselman's blog (about 50% into the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236&amp;amp;url=http%3a%2f%2fwww.hanselman.com%2fblog%2f32bitnessAnd64bitnessAndMigratingDasBlogOnIIS7AndASPNETUnderVista64.aspx"&gt;post&lt;/a&gt;). &lt;/p&gt;

&lt;h3&gt;Deleted Outlook contacts sync back&lt;/h3&gt;

&lt;p&gt;Because the phone has only a limited number of contacts (250) there's a filter dialog that can be used to tell the Gigaset QuickSync software which contacts should not be transmitted to the handset. Note that QuickSync will only load contacts that have a telephone number, so the contact count might differ from what Outlook reports.&lt;/p&gt;

&lt;p style="text-align: center"&gt;&lt;img alt="QuickSync Contact Filter Reports 198 Contacts" title="QuickSync Contact Filter Reports 198 Contacts" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/SiemensGigasetQuickSynconVistax64_C900/Contact%20Filter_03f81d2f-22d5-43ea-9779-e0b37dc473f6.png" /&gt;&lt;/p&gt;

&lt;p style="text-align: center"&gt;&lt;img title="Outlook Reports 219 Contacts" alt="Outlook Reports 219 Contacts" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/SiemensGigasetQuickSynconVistax64_C900/Outlook%20Contacts_38d6c8ea-5821-4f42-ad59-edb001b1c58b.png" /&gt; &lt;/p&gt;

&lt;p&gt;Nice, but today flash memory is cheaper than ever before. &lt;strong&gt;Why did the SL 370 product designers choose to have only 250 contacts on a 120 &amp;#8364; phone?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One (unresolved) problem I experience with the &amp;quot;syncing&amp;quot; ability is that if you delete an Outlook contact and re-sync the previously deleted contact will be recreated in Outlook. I suppose this is a known bug. One work-around is to delete all contacts on the phone before syncing.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;The SL 370 is a great phone: I adore its flyweight, the clean UI, the great battery power and the rich set of options like turning down the ringtone volume at nighttime. The weaknesses on the Windows software side should be fixed in the next release of the QuickSync. &lt;/p&gt;

&lt;p class="now-playing"&gt;Now Playing [&lt;a title="Insert Now Playing Into Your Own Blog Posts"  href="http://www.therightstuff.de/ct.ashx?id=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fProjects%2fNowPlaying%2f" rel="previewlink"&gt;?&lt;/a&gt;]: Sie &amp;#8211; &lt;a title="Display Amazon page of the Ruban D&amp;#39;Alpha album"  href="http://www.therightstuff.de/ct.ashx?id=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236&amp;amp;url=http%3a%2f%2fwww.amazon.com%2fexec%2fobidos%2fASIN%2fB000008257%2ftherightstu0e-20"&gt;Ruban D'Alpha&lt;/a&gt; &amp;#8211; &lt;a title="Preview Ciru catena on Last.fm"  href="http://www.therightstuff.de/ct.ashx?id=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236&amp;amp;url=http%3a%2f%2fwww.last.fm%2fmusic%2fSie%2f_%2fCiru%2bcatena%2f"&gt;Ciru catena&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=e20b4717-da5d-4fd1-a3bc-8ce7ec17b236"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,e20b4717-da5d-4fd1-a3bc-8ce7ec17b236.aspx</comments>
      <category>Hardware</category>
      <category>Tools and Software</category>
      <category>x64</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F01%2F19%2FSiemens%2BGigaset%2BQuickSync%2BOn%2BVista%2BX64.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/01/19/Siemens+Gigaset+QuickSync+On+Vista+X64.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=1c483ac3-cbb8-4249-b717-cd19c34ac017</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,1c483ac3-cbb8-4249-b717-cd19c34ac017.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,1c483ac3-cbb8-4249-b717-cd19c34ac017.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=1c483ac3-cbb8-4249-b717-cd19c34ac017</wfw:commentRss>
      <title>Neulich im Sp&amp;auml;ti</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,1c483ac3-cbb8-4249-b717-cd19c34ac017.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/211225530/Neulich+Im+Spaumlti.aspx</link>
      <pubDate>Fri, 04 Jan 2008 17:23:12 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Vielleicht hat's auch deswegen nicht mit dem Gesch&amp;#228;ft geklappt?&lt;/p&gt;  &lt;p style="text-align: center;"&gt;&amp;#160;&lt;a title="Sp&amp;#228;ti"  href="http://www.therightstuff.de/ct.ashx?id=1c483ac3-cbb8-4249-b717-cd19c34ac017&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fcontent%2fbinary%2fWindowsLiveWriter%2fNeulichimSpti_10240%2fSp%25C3%25A4ti_2.jpg" rel="lightbox"&gt;&lt;img title="Sp&amp;#228;ti" alt="Sp&amp;#228;ti" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/NeulichimSpti_10240/Sp%C3%A4ti_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=1c483ac3-cbb8-4249-b717-cd19c34ac017"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,1c483ac3-cbb8-4249-b717-cd19c34ac017.aspx</comments>
      <category>Fun Stuff</category>
      <category>NonTech</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F01%2F04%2FNeulich%2BIm%2BSpaumlti.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/01/04/Neulich+Im+Spaumlti.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=aa8c8466-a561-4861-a204-32c0a6a6f22b</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,aa8c8466-a561-4861-a204-32c0a6a6f22b.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,aa8c8466-a561-4861-a204-32c0a6a6f22b.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=aa8c8466-a561-4861-a204-32c0a6a6f22b</wfw:commentRss>
      <title>Rezept: H&amp;auml;hnchenschenkel mit getrockneten Feigen</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,aa8c8466-a561-4861-a204-32c0a6a6f22b.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/211208344/Rezept+Haumlhnchenschenkel+Mit+Getrockneten+Feigen.aspx</link>
      <pubDate>Fri, 04 Jan 2008 17:07:31 GMT</pubDate>
      <description>&lt;div&gt;&lt;ul&gt;   &lt;li&gt;4 H&amp;#228;hnchenschenkel&lt;/li&gt;    &lt;li&gt;2 rote Zwiebeln&lt;/li&gt;    &lt;li&gt;3 Knoblauchzehen&lt;/li&gt;    &lt;li&gt;3 getrocknete Feigen&lt;/li&gt;    &lt;li&gt;1 s&amp;#252;&amp;#223;er Apfel&lt;/li&gt;    &lt;li&gt;etwas Apfelsaft&lt;/li&gt;    &lt;li&gt;Oliven&amp;#246;l&lt;/li&gt;    &lt;li&gt;1 TL Honig&lt;/li&gt;    &lt;li&gt;Salz, Pfeffer&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Zwiebeln und Knoblauch sch&amp;#228;len und in Spalten schneiden. Den Apfel ebenfalls in Spalten zerlegen. Die getrockneten Feigen w&amp;#252;rfeln. Einen Br&amp;#228;ter mit Oliven&amp;#246;l bestreichen; Zwiebeln, Knoblauch und Feigen gleichm&amp;#228;&amp;#223;ig darin verteilen. Die H&amp;#228;hnchenschenkel salzen, pfeffern und obenauf legen, Zwischenr&amp;#228;ume mit Apfelst&amp;#252;ckchen auff&amp;#252;llen. 50 ml Apfelsaft aufgie&amp;#223;en.&lt;/p&gt;  &lt;p&gt;Den Br&amp;#228;ter mit geschlossenem Deckel 45 min. bei mittlerer Hitze in den Ofen stellen. Anschlie&amp;#223;end den Deckel abnehmen und die H&amp;#228;hnchenschenkel mit Honig besteichen. Bei Oberhitze &amp;#252;berkrusten.&lt;/p&gt;  &lt;p&gt;Dazu passt Baguette oder Couscous mit Rosinen (hierf&amp;#252;r die Rosinen vorher in etwas Apfelsaft aufkochen und weichen lassen).&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=aa8c8466-a561-4861-a204-32c0a6a6f22b"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,aa8c8466-a561-4861-a204-32c0a6a6f22b.aspx</comments>
      <category>Recipes (German)</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2008%2F01%2F04%2FRezept%2BHaumlhnchenschenkel%2BMit%2BGetrockneten%2BFeigen.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2008/01/04/Rezept+Haumlhnchenschenkel+Mit+Getrockneten+Feigen.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=46527400-aa43-4989-8cf9-165aaff9f5c4</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,46527400-aa43-4989-8cf9-165aaff9f5c4.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,46527400-aa43-4989-8cf9-165aaff9f5c4.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=46527400-aa43-4989-8cf9-165aaff9f5c4</wfw:commentRss>
      <title>New DasBlog Macros for On-Page Navigation and Post Modification Date</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,46527400-aa43-4989-8cf9-165aaff9f5c4.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/208503203/New+DasBlog+Macros+For+OnPage+Navigation+And+Post+Modification+Date.aspx</link>
      <pubDate>Sun, 30 Dec 2007 15:08:54 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Per &lt;a  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fblogs.compactframework.de%2fTorsten.Weber%2f" rel="friend met"&gt;Torsten&lt;/a&gt;'s request I created a couple of new macros for &lt;a  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fwww.dasblog.info%2f"&gt;DasBlog&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;On-Page Navigation&lt;/h3&gt;  &lt;p&gt;Torsten wanted to enable on-page navigation to the next and previous post, comparable to the mail navigation introduced in Outlook 2007:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img title="Outlook 2007 Navigation" alt="Outlook 2007 Navigation" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/NewDasBlogMacrosforOnPageNavigation_D46E/Outlook_5f51f19f-67c4-4f69-90eb-fe768ce75629.png" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img title="Previous and Next Macros Sample Output" style="margin-bottom: 1em; margin-left: 1em" alt="Previous and Next Macros Sample Output" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/NewDasBlogMacrosforOnPageNavigation_D46E/Prevous%20and%20Next_6e6e8081-df2d-4b52-b563-40e0ef56f628.png" align="right" /&gt;The &lt;code&gt;OnPageNextLink&lt;/code&gt; and &lt;code&gt;OnPagePreviousLink&lt;/code&gt; macros display a link to the next and previous post on the current page in list view. Please note that these macros don't create link across pages. For example, the last post on the page doesn't have a previous link, even though there might me older posts. &lt;/p&gt;  &lt;p&gt;Because I use &lt;a  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fwww.hanselman.com%2fblog%2fUsingISAPIRewriteToCanonicalizeASPNETURLsAndRemoveDefaultaspx.aspx"&gt;URL rewriting&lt;/a&gt; to get rid of &lt;strong&gt;/default.aspx&lt;/strong&gt; in my home page URL an issue with the browser reloading the whole page came up, making is necessary to create a couple of overloads:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;code&gt;OnPageNextLink(navigationText)        &lt;br /&gt;&lt;/code&gt;&lt;code&gt;OnPagePreviousLink(navigationText)&lt;/code&gt;       &lt;br /&gt;Renders a link to the next/previous post on the current page. The CSS class for the anchor tag is &lt;code&gt;next&lt;/code&gt; and &lt;code&gt;previous&lt;/code&gt;, respectively. The &lt;code&gt;navigationText&lt;/code&gt; parameter takes a string containing different locale versions of the text to be displayed as used in the &lt;code&gt;LocalString&lt;/code&gt; macro.       &lt;br /&gt;The first post on the page does not have a &amp;quot;next&amp;quot; link, whereas the last post on the page does not have a &amp;quot;previous&amp;quot; link. &lt;/li&gt;    &lt;li&gt;&lt;code&gt;OnPageNextLink(navigationText, removeUrlFragmentRegex)        &lt;br /&gt;&lt;/code&gt;&lt;code&gt;OnPagePreviousLink(navigationText, removeUrlFragmentRegex)&lt;/code&gt;       &lt;br /&gt;Same as above. The &lt;a  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2f2k3te2cs(VS.80).aspx"&gt;regular expression&lt;/a&gt; specified by the &lt;code&gt;removeUrlFragments&lt;/code&gt; parameter will be used to remove parts from the URL.       &lt;br /&gt;If you use URL rewriting for &lt;strong&gt;/default.aspx&lt;/strong&gt;, the regular expression is &lt;code&gt;default\.aspx$&lt;/code&gt;. &lt;/li&gt;    &lt;li&gt;&lt;code&gt;OnPageNextLink(navigationText, cssClass, removeUrlFragmentRegex)        &lt;br /&gt;&lt;/code&gt;&lt;code&gt;OnPagePreviousLink(navigationText, cssClass, removeUrlFragmentRegex)&lt;/code&gt;       &lt;br /&gt;Same as above, but you are able to set the CSS class explicitly. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Example&lt;/h4&gt;  &lt;p&gt;In your &lt;strong&gt;itemTemplate.blogtemplate&lt;/strong&gt;, embed the macro markup for the on-page navigation. Note that in this example uses a regular expression to remove a tailing &amp;quot;default.aspx&amp;quot; from URLs:&lt;/p&gt;  &lt;pre&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt; OnPageNextLink(&amp;quot;Next|DE:Weiter&amp;quot;, &amp;quot;default\.aspx$&amp;quot;) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt; OnPagePreviousLink(&amp;quot;Previous|DE:Zur&amp;#252;ck&amp;quot;, &amp;quot;default\.aspx$&amp;quot;) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This will render the following HTML for &lt;strong&gt;/default.aspx&lt;/strong&gt; which can be styled using CSS:&lt;/p&gt;

&lt;pre&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;a&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;next&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://www.therightstuff.de/#&amp;lt;some-guid&amp;gt;&amp;quot;&amp;gt;&lt;/span&gt;Next&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;a&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;previous&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://www.therightstuff.de/#&amp;lt;some-guid&amp;gt;&amp;quot;&amp;gt;&lt;/span&gt;Previous&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The HTML for URLs other than &lt;strong&gt;/default.aspx&lt;/strong&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;a&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;next&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://www.therightstuff.de/&lt;strong&gt;default,page,1.aspx&lt;/strong&gt;#&amp;lt;some-guid&amp;gt;&amp;quot;&amp;gt;&lt;/span&gt;Next&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;a&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;previous&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://www.therightstuff.de/&lt;strong&gt;default,page,1.aspx&lt;/strong&gt;#&amp;lt;some-guid&amp;gt;&amp;quot;&amp;gt;&lt;/span&gt;Previous&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3&gt;Post Modification Date&lt;/h3&gt;

&lt;p&gt;Another requirement Torsten had is to be able to display the modification date of a post. For unedited posts this date is equal to the creation date, which we use to decide whether to display the modification date or not. There are a couple of overloads:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;Modified&lt;/code&gt; 

    &lt;br /&gt;Displays the modification date if the post has been modified. (Comparable to the &lt;code&gt;When&lt;/code&gt; macro.) &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;FormattedModified(format)&lt;/code&gt; 

    &lt;br /&gt;Displays the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2faz4se3k1(VS.80).aspx"&gt;formatted&lt;/a&gt; modification date if the post has been modified and appends the timezone the blog is hosted in. (Comparable to the &lt;code&gt;FormattedWhen&lt;/code&gt; macro.) &lt;/code&gt;&lt;/li&gt;

  &lt;li&gt;&lt;code&gt;FormattedModifiedBare(format)&lt;/code&gt; 

    &lt;br /&gt;Displays the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2faz4se3k1(VS.80).aspx"&gt;formatted&lt;/a&gt; modification date if the post has been modified and &lt;em&gt;does not&lt;/em&gt; append the timezone the blog is hosted in. (Comparable to the &lt;code&gt;FormattedWhenBare&lt;/code&gt; macro.) &lt;/code&gt;&lt;/li&gt;

  &lt;li&gt;&lt;code&gt;IfModified(expression)&lt;/code&gt; 

    &lt;br /&gt;Displays localized text if the post has been modified. The &lt;code&gt;expression&lt;/code&gt; parameter takes a string containing different locale versions of the text as used in the &lt;code&gt;LocalString&lt;/code&gt; macro. &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Example&lt;/h4&gt;

&lt;p&gt;In your &lt;strong&gt;itemTemplate.blogtemplate&lt;/strong&gt;, embed the macro markup for the post creation date and the modification date:&lt;/p&gt;

&lt;pre&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt; LocalString(&amp;quot;Posted in|DE:Ver&amp;#246;ffentlicht unter&amp;quot;) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt; &lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt; categoryLinks &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt; LocalString(&amp;quot;at|DE:am&amp;quot;) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt; &lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt; FormattedWhen(&amp;quot;f&amp;quot;) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt; IfModified(&amp;quot; and changed at |DE: und ver&amp;#228;ndert am &amp;quot;) &lt;span style="background: #ffee62"&gt;%&amp;gt;&amp;lt;%&lt;/span&gt; FormattedModified(&amp;quot;f&amp;quot;) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This will render the following HTML for an edited post:&lt;/p&gt;

&lt;p&gt;&lt;img height="50" alt="Modification Date" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/NewDasBlogMacrosforOnPageNavigation_D46E/Modification%20Date_96a91e7d-f289-4b76-bbf3-7f4b37478d4e.png" width="561" border="0" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p class="now-playing"&gt;Now Playing [&lt;a title="Insert Now Playing Into Your Own Blog Posts"  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fProjects%2fNowPlaying%2f" rel="previewlink"&gt;?&lt;/a&gt;]: &lt;a title="Display relations of Ulrich Schnauss to other artists"  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fwww.music-map.de%2fulrich%2bschnauss.html"&gt;Ulrich Schnauss&lt;/a&gt; &amp;#8211; &lt;a title="Display Amazon page of the Goodbye album"  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fwww.amazon.com%2fexec%2fobidos%2fASIN%2fB000RGSOOG%2ftherightstu0e-20"&gt;Goodbye&lt;/a&gt; &amp;#8211; &lt;a title="Preview Stars on Last.fm"  href="http://www.therightstuff.de/ct.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4&amp;amp;url=http%3a%2f%2fwww.last.fm%2fmusic%2fUlrich%2bSchnauss%2f_%2fStars%2f"&gt;Stars&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=46527400-aa43-4989-8cf9-165aaff9f5c4"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,46527400-aa43-4989-8cf9-165aaff9f5c4.aspx</comments>
      <category>dasBlog</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2007%2F12%2F30%2FNew%2BDasBlog%2BMacros%2BFor%2BOnPage%2BNavigation%2BAnd%2BPost%2BModification%2BDate.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2007/12/30/New+DasBlog+Macros+For+OnPage+Navigation+And+Post+Modification+Date.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=0965e290-6ae1-4747-b2a4-64323c38a9fd</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,0965e290-6ae1-4747-b2a4-64323c38a9fd.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,0965e290-6ae1-4747-b2a4-64323c38a9fd.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=0965e290-6ae1-4747-b2a4-64323c38a9fd</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <title>Prof. Harald Lesch: Neues Format, neue Folgen</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,0965e290-6ae1-4747-b2a4-64323c38a9fd.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/205132119/Prof+Harald+Lesch+Neues+Format+Neue+Folgen.aspx</link>
      <pubDate>Sun, 23 Dec 2007 14:04:33 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;img title="Prof. Harald Lesch" style="margin-bottom: 1em; margin-left: 1em" alt="Prof. Harald Lesch" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/Prof.HaraldLeschNeueFolgen_CE37/Lesch_6.jpg" align="right" /&gt; Anfang dieses Jahres wurde einer der wenigen brauchbaren Fernsehangebote aus dem Programm gestrichen: &lt;a  href="http://www.therightstuff.de/ct.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2f2007%2f02%2f12%2fAlpha%2bCentauri%2bLeider%2bAus%2bUnd%2bVorbei.aspx"&gt;Der Bayerische Rundfunk hat Alpha Centauri abgesetzt.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ein mir bislang unbekannter Spartensender namens &lt;a  href="http://www.therightstuff.de/ct.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd&amp;amp;url=http%3a%2f%2fwww.scifi.de%2f"&gt;SciFi&lt;/a&gt; hat Alpha Centauri nun neu aufgelegt: Prof. Lesch wandelt als &amp;quot;Sci_xpert&amp;quot; ganz in wei&amp;#223; in einem ebenso wei&amp;#223;en Studio und referiert in gewohnt einleuchtender Art und Weise &amp;#252;ber die Zukunft und die Geheimnisse des Weltalls. Jede Woche gibt es eine neue Folge &lt;a  href="http://www.therightstuff.de/ct.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd&amp;amp;url=http%3a%2f%2fwww.scifi.de%2fscifi%2findex.php%3fStoryID%3d28%26news_id%3d12%26action%3dsciclips"&gt;zum Download&lt;/a&gt;, per &lt;a  href="http://www.therightstuff.de/ct.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd&amp;amp;url=http%3a%2f%2fwww.youtube.com%2fprofile%3fuser%3dSciFiGermany"&gt;YouTube&lt;/a&gt; oder als &lt;a  href="http://www.therightstuff.de/ct.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd&amp;amp;url=http%3a%2f%2f195.30.240.102%2fpodcast%2fpodcasts_xml%2fLesch1_Folge.xml"&gt;RSS Feed&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Die Hintergrundmusik stammt &amp;#252;brigens von diesem meisterhaften Album:&lt;/p&gt;  &lt;p class="now-playing"&gt;Now Playing [&lt;a title="Insert Now Playing Into Your Own Blog Posts"  href="http://www.therightstuff.de/ct.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd&amp;amp;url=http%3a%2f%2fwww.therightstuff.de%2fProjects%2fNowPlaying%2f" rel="previewlink"&gt;?&lt;/a&gt;]: &lt;a  href="http://www.therightstuff.de/ct.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd&amp;amp;url=http%3a%2f%2fwww.amazon.de%2fdp%2fB00000G257%2ftherightstu0e-20"&gt;Kruder &amp;amp; Dorfmeister &amp;#8211; The K&amp;amp;D Sessions&lt;/a&gt; &amp;#8211; &lt;a title="Display relations of Sofa Surfers to other artists"  href="http://www.therightstuff.de/ct.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd&amp;amp;url=http%3a%2f%2fwww.music-map.de%2fsofa%2bsurfers.html"&gt;Sofa Surfers&lt;/a&gt; &amp;#8211; &lt;a title="Preview Sofa rockers (Richard Dorfmeister Remix) on Last.fm"  href="http://www.therightstuff.de/ct.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd&amp;amp;url=http%3a%2f%2fwww.last.fm%2fmusic%2fSofa%2bSurfers%2f_%2fSofa%2brockers%2b(Richard%2bDorfmeister%2bRemix)%2f"&gt;Sofa rockers (Richard Dorfmeister Remix)&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.therightstuff.de/aggbug.ashx?id=0965e290-6ae1-4747-b2a4-64323c38a9fd"/&gt;&lt;/div&gt;</description>
      <comments>http://www.therightstuff.de/CommentView,guid,0965e290-6ae1-4747-b2a4-64323c38a9fd.aspx</comments>
      <category>Fun Stuff</category>
      <category>NonTech</category>
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=alexandergross&amp;itemurl=http%3A%2F%2Fwww.therightstuff.de%2F2007%2F12%2F23%2FProf%2BHarald%2BLesch%2BNeues%2BFormat%2BNeue%2BFolgen.aspx</feedburner:awareness><feedburner:origLink>http://www.therightstuff.de/2007/12/23/Prof+Harald+Lesch+Neues+Format+Neue+Folgen.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.therightstuff.de/Trackback.aspx?guid=eb564390-a62e-4eb3-9176-5b144e7497ef</trackback:ping>
      <pingback:server>http://www.therightstuff.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.therightstuff.de/PermaLink,guid,eb564390-a62e-4eb3-9176-5b144e7497ef.aspx</pingback:target>
      <dc:creator>Alexander Groß</dc:creator>
      <georss:point>51.32533 12.34274</georss:point>
      <wfw:comment>http://www.therightstuff.de/CommentView,guid,eb564390-a62e-4eb3-9176-5b144e7497ef.aspx</wfw:comment>
      <wfw:commentRss>http://www.therightstuff.de/SyndicationService.asmx/GetEntryCommentsRss?guid=eb564390-a62e-4eb3-9176-5b144e7497ef</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>The Woes Of Finding A High-Quality Sound Card For Vista x64</title>
      <guid isPermaLink="false">http://www.therightstuff.de/PermaLink,guid,eb564390-a62e-4eb3-9176-5b144e7497ef.aspx</guid>
      <link>http://feeds.feedburner.com/~r/alexandergross/~3/191452903/The+Woes+Of+Finding+A+HighQuality+Sound+Card+For+Vista+X64.aspx</link>
      <pubDate>Tue, 27 Nov 2007 19:59:48 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;img style="float: right; margin-bottom: 1em; margin-left: 1em" alt="Sound card" src="http://www.therightstuff.de/content/binary/WindowsLiveWriter/TheWoesOfFindingAHighQualitySoundCard_107C5/Sound%20card_f89ad21d-79fa-4cbc-aae1-2730752671bf.png" /&gt; I am an audio enthusiast. My friends and I share a bit of a tendency listening to music, and the music should be reproduced clearly and in the best quality possible. For this very purpose I bought a mid-level Hi-Fi set a couple of years ago and connected it to my computer. At that time the machine was equipped with a crappy Sound Blaster sound card. The audio card was okay for the &amp;quot;high quality&amp;quot; Logitech speakers I used before I ordered amp and speakers. But after some hours of listening to the new Hi-Fi set I found that the Sound Blaster produced some kind of static sizzle, usually the instant before high amplitudes were sent over the wire. It was like my ears specialized in hearing these nasty glitches and listening to music became an agony. You might think that I'm nit-picking but actually listening to music wasn't the fun it used to be.&lt;/p&gt;  &lt;p&gt;I started researching entry-level professional sound cards that are mostly used in studio recording environments. With the help of a newsgroup I soon found the &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb564390-a62e-4eb3-9176-5b144e7497ef&amp;amp;url=http%3a%2f%2fmarian.de%2fen%2fproducts%2fmarc_2"&gt;Marc 2&lt;/a&gt; for around 150 &amp;#8364;, manufactured by &lt;a  href="http://www.therightstuff.de/ct.ashx?id=eb564390-a62e-4eb3-9