<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Tools</title>
        <link>http://nimblecoder.com/blog/category/13.aspx</link>
        <description>Tools</description>
        <language>en-US</language>
        <copyright>Ryan Van Slooten</copyright>
        <generator>Subtext Version 2.1.1.1</generator>
        <item>
            <title>Automatically setting the Specified property in WSDL Generated files</title>
            <link>http://nimblecoder.com/blog/archive/2008/04/01/automatically-setting-the-specified-property-in-wsdl-generated-files.aspx</link>
            <description>&lt;p&gt;The wsdl.exe tool with Visual Studio can be used to manually generate a code file to use with a project. If you use the nillable or minOccurs attributes in the XSD though, the wsdl.exe tool generates a boolean 'Specified' field that must be set to true in order to transmit the data through the web service. For example:&lt;/p&gt; &lt;h3&gt;WSDL File (myfile.wsdl)&lt;/h3&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="duedate"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:dateTime"&lt;/span&gt; &lt;span class="attr"&gt;nillable&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h3&gt;Generated CS File (wsdl.exe myfile.wsdl)&lt;/h3&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// ...&lt;/span&gt;

&lt;span class="kwrd"&gt;private&lt;/span&gt; System.Nullable&amp;lt;System.DateTime&amp;gt; duedateField;

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; duedateFieldSpecified;

&lt;span class="rem"&gt;// ...&lt;/span&gt;

&lt;span class="rem"&gt;/// &amp;lt;remarks/&amp;gt;&lt;/span&gt;
[System.Xml.Serialization.XmlElementAttribute(IsNullable=&lt;span class="kwrd"&gt;true&lt;/span&gt;)]
&lt;span class="kwrd"&gt;public&lt;/span&gt; System.Nullable&amp;lt;System.DateTime&amp;gt; duedate {
    get {
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.duedateField;
    }
    set {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.duedateField = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
    }
}

&lt;span class="rem"&gt;/// &amp;lt;remarks/&amp;gt;&lt;/span&gt;
[System.Xml.Serialization.XmlIgnoreAttribute()]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; duedateSpecified {
    get {
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.duedateFieldSpecified;
    }
    set {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.duedateFieldSpecified = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
    }
}
&lt;/pre&gt;
&lt;h3&gt;"Breaking Change"&lt;/h3&gt;
&lt;p&gt;What I wanted was simply add the line to the 'duedate' setter to check if the newly assigned value was null or not (the assumption is that a non-null value would mean the field is 'specified'):&lt;/p&gt;&lt;pre class="csharpcode"&gt;    set {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.duedateField = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
&lt;span style="background-color: #ecf6f9"&gt;        &lt;span class="kwrd"&gt;this&lt;/span&gt;.duedateFieldSpecified = (&lt;span class="kwrd"&gt;value&lt;/span&gt; != &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/span&gt;
    }

&lt;/pre&gt;
&lt;p&gt;I looked around for a solution, but all I found a &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=90727" target="_blank"&gt;very good suggestion&lt;/a&gt; to add this functionality to the wsdl.exe tool. Unfortunately the status was "Closed (Won't Fix)" and the comment was:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Thank you for the suggestion.&lt;br /&gt;This would be nice enhancement, but unfortunately this also is a breaking change: in the previous versions of the .net framework setting value of 'xxx' field did not toggle the xxxSepcified value, so if we change this runtime behavior of some existing applications may change and will require user code change to run the same way as before.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;On the contrary, I contend it would not be difficult or breaking to simply add the functionality through optional parameters, such as: 
&lt;/p&gt;&lt;p&gt;wsdl.exe /autospecified:1 myfile.wsdl 
&lt;/p&gt;&lt;p&gt;The optional parameters would not affect default operation nor break existing code, but instead we have to deal with a short-sighted decision. 
&lt;/p&gt;&lt;h3&gt;Quick and Dirty Solution&lt;/h3&gt;
&lt;p&gt;I decided to write a quick script to try and automatically generate the extra line of code for each setter. I decided to use awk (there are a number of sources for a Windows awk/gawk - &lt;a href="http://www.cygwin.com/" target="_blank"&gt;cygwin&lt;/a&gt;, &lt;a href="http://unxutils.sourceforge.net/" target="_blank"&gt;unxutils&lt;/a&gt;, and more) as it is very quick to implement and script. The following script is the result:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;#!/usr/bin/awk -f&lt;/span&gt;

&lt;span class="rem"&gt;# This is a quick and dirty script to add automatically set the&lt;/span&gt;
&lt;span class="rem"&gt;# 'myFieldSpecified' variables generated from the Visual Studio&lt;/span&gt;
&lt;span class="rem"&gt;# wsdl.exe tool. The script searches for System.Nullable types &lt;/span&gt;
&lt;span class="rem"&gt;# (myField) and verifies a specified variable exists &lt;/span&gt;
&lt;span class="rem"&gt;# (myFieldSpecified). It then searches for the setter and adds&lt;/span&gt;
&lt;span class="rem"&gt;# the line: this.myFieldSpecified = (value != null);&lt;/span&gt;
&lt;span class="rem"&gt;#&lt;/span&gt;
&lt;span class="rem"&gt;# Copyright (C) 2008 Ryan Van Slooten&lt;/span&gt;
&lt;span class="rem"&gt;#&lt;/span&gt;
&lt;span class="rem"&gt;# Version:&lt;/span&gt;
&lt;span class="rem"&gt;#   1.0     2008-04-01      Initial release&lt;/span&gt;
&lt;span class="rem"&gt;#&lt;/span&gt;

BEGIN { FS = &lt;span class="str"&gt;" "&lt;/span&gt;; }

&lt;span class="rem"&gt;# Match the nullable types in the file: int, DateTime, etc.&lt;/span&gt;
/[ \t]*&lt;span class="kwrd"&gt;private&lt;/span&gt; System.Nullable/ {
    print $0;

    &lt;span class="rem"&gt;# Add name of field to nullable array&lt;/span&gt;
    name = substr($3, 1, length($3)-1);
    nullable[name] = &lt;span class="str"&gt;""&lt;/span&gt;;
    next; 
}

&lt;span class="rem"&gt;# Match the xxxFieldSpecified variables&lt;/span&gt;
/[ \t]*&lt;span class="kwrd"&gt;private&lt;/span&gt; .*FieldSpecified;/ {
    print $0;

    &lt;span class="rem"&gt;# Increment value of 'specified' null field to nullable array&lt;/span&gt;
    name = substr($3, 1, length($3)-10);
    specified = substr($3, 1, length($3)-1);
    nullable[name] = specified;
    next; 
}

&lt;span class="rem"&gt;# Match the field setter and check if it is nullable and specified&lt;/span&gt;
/[ \t]*this.* = value;/ {
    print $0;

    &lt;span class="rem"&gt;# Check if field is nullable and has a specified property&lt;/span&gt;
    name = substr($1, 6);
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (name &lt;span class="kwrd"&gt;in&lt;/span&gt; nullable) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (length(nullable[name]) &amp;gt; 0) {
            &lt;span class="rem"&gt;# Fix lost indentation level&lt;/span&gt;
            indent = substr($0, 1, index($0, $1)-1);

            &lt;span class="rem"&gt;# Adjust the xxxFieldSpecified value&lt;/span&gt;
            $1 = $1 &lt;span class="str"&gt;"Specified"&lt;/span&gt;;
            $3 = &lt;span class="str"&gt;"("&lt;/span&gt; substr($3, 1, length($3)-1) &lt;span class="str"&gt;" != null);"&lt;/span&gt;;
            print indent $0;

            &lt;span class="rem"&gt;# Remove element from array&lt;/span&gt;
            delete nullable[name];
        }
    }
    next;
}

&lt;span class="rem"&gt;# default line handler&lt;/span&gt;
{ print $0; }

&lt;/pre&gt;
&lt;div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fnimblecoder.com%2fblog%2farchive%2f2008%2f04%2f01%2fautomatically-setting-the-specified-property-in-wsdl-generated-files.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fnimblecoder.com%2fblog%2farchive%2f2008%2f04%2f01%2fautomatically-setting-the-specified-property-in-wsdl-generated-files.aspx" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:874bc33b-2c0b-430a-8b9b-8e9d17ea1460" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/awk" rel="tag"&gt;awk&lt;/a&gt;, &lt;a href="http://technorati.com/tags/c#" rel="tag"&gt;c#&lt;/a&gt;, &lt;a href="http://technorati.com/tags/wsdl" rel="tag"&gt;wsdl&lt;/a&gt;, &lt;a href="http://technorati.com/tags/web%20services" rel="tag"&gt;web services&lt;/a&gt;&lt;/div&gt;&lt;img src="http://nimblecoder.com/blog/aggbug/61.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Van Slooten</dc:creator>
            <guid>http://nimblecoder.com/blog/archive/2008/04/01/automatically-setting-the-specified-property-in-wsdl-generated-files.aspx</guid>
            <pubDate>Tue, 01 Apr 2008 20:51:15 GMT</pubDate>
            <wfw:comment>http://nimblecoder.com/blog/comments/61.aspx</wfw:comment>
            <comments>http://nimblecoder.com/blog/archive/2008/04/01/automatically-setting-the-specified-property-in-wsdl-generated-files.aspx#feedback</comments>
            <wfw:commentRss>http://nimblecoder.com/blog/comments/commentRss/61.aspx</wfw:commentRss>
            <trackback:ping>http://nimblecoder.com/blog/services/trackbacks/61.aspx</trackback:ping>
        </item>
        <item>
            <title>Resizing Virtual Machines Guide with VMware</title>
            <link>http://nimblecoder.com/blog/archive/2008/02/19/resizing-virtual-machines-guide-with-vmware.aspx</link>
            <description>&lt;p&gt;Lately I've been setting up a lot of virtual machines. It is time-consuming and frustrating but the end results are extremely useful. I discovered that using Windows 2003 R2 consumes a lot of hard disk space. I started with an 8 Gb virtual hard drive and before I knew it I ran out of space. Of course, depending on the VM I needed Microsoft Office, or Visual Studio, or SharePoint, or SQL Server, or BizTalk, or all of the above. I developed my base virtual machine first and then &lt;a href="http://blogs.technet.com/megand/articles/357570.aspx" target="_blank"&gt;sysprep&lt;/a&gt;-ped it and then started installing all of the requisite software.&lt;/p&gt; &lt;p&gt;Once I realized there was no way the VM would survive with limited disk space, I set out to increase the virtual disk capacity. Unfortunately you can't resize the partition through Windows but you need to download a partition editor to do this.&lt;/p&gt; &lt;h4&gt;Step 1: Resize the virtual hard disk with "vmware-vdiskmanager"&lt;/h4&gt; &lt;p&gt;Open a command prompt (I like Console2) and change the directory to your VM image location. Use the "vmware-vdiskmanager -x" command to increase the hard disk size. I preferred to add the VMware directory to the path so I didn't have excessively long commands. For example, the command I used was:&lt;/p&gt; &lt;p&gt;SET PATH=%PATH%;C:\Program Files\VMware\VMware Server&lt;/p&gt; &lt;p&gt;vmware-vdiskmanager -x 16GB win2k3-sql.vmdk&lt;/p&gt; &lt;p&gt;&lt;a href="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/vmware-vdiskmanager-grow_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="66" alt="vmware-vdiskmanager-grow" src="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/vmware-vdiskmanager-grow_thumb.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When the disk manager is finished resizing the disk, it looks like the following:&lt;/p&gt; &lt;p&gt;&lt;a href="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/vmware-vdiskmanager-done_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="218" alt="vmware-vdiskmanager-done" src="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/vmware-vdiskmanager-done_thumb.png" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;For reference, the help text from "vmware-vdiskmanager --help" is at the end of this post. &lt;/p&gt; &lt;h4&gt;Step 2: Download GNU Partition Editor (GPartEd)&lt;/h4&gt; &lt;p&gt;There were several recommendations on the VMware web site, but the &lt;a href="http://gparted.sourceforge.net/" target="_blank"&gt;GNU Partition Editor&lt;/a&gt; seemed to be the smallest and easiest way to edit the partition table.&lt;/p&gt; &lt;h4&gt;Step 3: Mount the gparted ISO in VMware&lt;/h4&gt; &lt;p&gt;Select the VM\Settings menu item&lt;/p&gt; &lt;p&gt;&lt;a href="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/vmware-settings_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="146" alt="vmware-settings" src="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/vmware-settings_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/vmware-console_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="95" alt="vmware-console" src="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/vmware-console_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;h4&gt;Step 4: Reboot the VM and select the Boot Menu&lt;/h4&gt; &lt;p&gt;You have to act fast when you reboot the VM. Click on the main window area to set the window focus and then press 'Esc' key to open the boot menu and then from the CD-ROM Drive. You need to click on the window to set focus because at this point in the boot process, the vmtools isn't loaded and can't provide the normal integration features.&lt;/p&gt; &lt;p&gt;&lt;a href="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/gparted-boot_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="147" alt="gparted-boot" src="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/gparted-boot_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;h4&gt;Step 5: Resize the partition&lt;/h4&gt; &lt;p&gt;Select the primary partition and right-click on the partition and select "Resize".&lt;/p&gt; &lt;p&gt;&lt;a href="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/gparted-main_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="gparted-main" src="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/gparted-main_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Expand the partition &lt;/p&gt; &lt;p&gt;&lt;a href="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/gparted-resize_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="183" alt="gparted-resize" src="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/gparted-resize_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When it is finished, it displays the results&lt;/p&gt; &lt;p&gt;&lt;a href="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/gparted-results_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="gparted-results" src="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/gparted-results_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;h4&gt;Step 6: Reboot the VM&lt;/h4&gt; &lt;p&gt;The VM will most likely check the disk since the dimensions have changed.&lt;/p&gt; &lt;p&gt;&lt;a href="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/win2k3-chkdsk_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="win2k3-chkdsk" src="http://nimblecoder.com/blog/images/nimblecoder_com/blog/WindowsLiveWriter/ResizingVirtualMachinesGuidewithVMware_AA49/win2k3-chkdsk_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Once it has finished, you should be done. Congratulations!&lt;/p&gt; &lt;hr /&gt;  &lt;h4&gt;Reference&lt;/h4&gt; &lt;p&gt;Here is the "vmware-vdiskmanager --help" output:&lt;/p&gt;&lt;pre&gt;VMware Virtual Disk Manager - build 56528.
Usage: vmware-vdiskmanager.exe OPTIONS diskName | drive-letter:
Offline disk manipulation utility
  Options:
     -c                   : create disk; need to specify other create options
     -d                   : defragment the specified virtual disk
     -k                   : shrink the specified virtual disk
     -n &amp;lt;source-disk&amp;gt;     : rename the specified virtual disk; need to
                            specify destination disk-name
     -p                   : prepare the mounted virtual disk specified by
                            the drive-letter for shrinking
     -q                   : do not log messages
     -r &amp;lt;source-disk&amp;gt;     : convert the specified disk; need to specify
                            destination disk-type
     -x &amp;lt;new-capacity&amp;gt;    : expand the disk to the specified capacity

     Additional options for create and convert:
        -a &amp;lt;adapter&amp;gt;      : (for use with -c only) adapter type (ide, buslogic or lsilogic)
        -s &amp;lt;size&amp;gt;         : capacity of the virtual disk
        -t &amp;lt;disk-type&amp;gt;    : disk type id

     Disk types:
        0                 : single growable virtual disk
        1                 : growable virtual disk split in 2Gb files
        2                 : preallocated virtual disk
        3                 : preallocated virtual disk split in 2Gb files

     The capacity can be specified in sectors, Kb, Mb or Gb.
     The acceptable ranges:
                           ide adapter : [100.0Mb, 950.0Gb]
                           scsi adapter: [100.0Mb, 950.0Gb]
        ex 1: vmware-vdiskmanager.exe -c -s 850Mb -a ide -t 0 myIdeDisk.vmdk
        ex 2: vmware-vdiskmanager.exe -d myDisk.vmdk
        ex 3: vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 0 destinationDisk.vmdk
        ex 4: vmware-vdiskmanager.exe -x 36Gb myDisk.vmdk
        ex 5: vmware-vdiskmanager.exe -n sourceName.vmdk destinationName.vmdk
        ex 6: vmware-vdiskmanager.exe -k myDisk.vmdk
        ex 7: vmware-vdiskmanager.exe -p m:
              (A virtual disk first needs to be mounted at m:
               using the VMware Diskmount Utility.)
&lt;/pre&gt;
&lt;div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.nimblecoder.com%2fblog%2farchive%2f2008%2f02%2f19%2fresizing-virtual-machines-guide-with-vmware.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.nimblecoder.com%2fblog%2farchive%2f2008%2f02%2f19%2fresizing-virtual-machines-guide-with-vmware.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://nimblecoder.com/blog/aggbug/58.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Van Slooten</dc:creator>
            <guid>http://nimblecoder.com/blog/archive/2008/02/19/resizing-virtual-machines-guide-with-vmware.aspx</guid>
            <pubDate>Tue, 19 Feb 2008 18:05:57 GMT</pubDate>
            <wfw:comment>http://nimblecoder.com/blog/comments/58.aspx</wfw:comment>
            <comments>http://nimblecoder.com/blog/archive/2008/02/19/resizing-virtual-machines-guide-with-vmware.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://nimblecoder.com/blog/comments/commentRss/58.aspx</wfw:commentRss>
            <trackback:ping>http://nimblecoder.com/blog/services/trackbacks/58.aspx</trackback:ping>
        </item>
        <item>
            <title>Do You Remember All of Your Command-line Parameters?</title>
            <link>http://nimblecoder.com/blog/archive/2007/09/28/do-you-remember-all-of-your-command-line-parameters.aspx</link>
            <description>&lt;p&gt;I had to brush up on my command-line parameters for cl, link, lib, and dumpbin today. It had been a little while since I had done this so I had to refresh my memory. The project dealt with a DLL generated by Delphi (the original source language was closest to Pascal/Delphi so I wrote a utility to convert Pascal rather than doing a massive conversion) and also generated C headers files and C unit test files at the same time. A while back they wanted a new DLL for a different project that used different functions from the original source. I was quite busy on another project but found enough time to make the new DLL. There was a problem with the initialization of one of the functions though.&lt;/p&gt; &lt;p&gt;In order to debug, I compiled the unit test but it wouldn't link directly to the DLL. I had to generate the .LIB and .EXP from the DLL file and I had to go back to the manuals to figure it out again. Fortunately I already had the .DEF file but I used dumpbin /exports to verify the list of functions. The command to build the .LIB file was: lib /def:myfake.dll /machine:IX86 /verbose&lt;/p&gt;&lt;img alt="Command Prompt" src="http://static.flickr.com/1162/1453786443_b2af41bba0.jpg" border="0" /&gt;  &lt;p&gt;It didn't take too long to generate the .LIB file and compile and link the unit test. And sure enough I found the problem in a minute. Since the end use for the DLL is a simulation system, when the DLL makes function calls to methods involving time there is a callback function that allows the simulation to provide the time information. The language conversion utility is not aware of special system functions that need extra initialization (it was a feature I always wanted to add but never got time to do and I've moved on to other departments since then). It turned out the only thing missing was to add the TIMER structure to the function block structure in the C header file and everything was fine.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d8f9d159-2874-4d6d-8a0f-93d73c40f674" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/command%20line" rel="tag"&gt;command line&lt;/a&gt;&lt;/div&gt;&lt;img src="http://nimblecoder.com/blog/aggbug/40.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Van Slooten</dc:creator>
            <guid>http://nimblecoder.com/blog/archive/2007/09/28/do-you-remember-all-of-your-command-line-parameters.aspx</guid>
            <pubDate>Fri, 28 Sep 2007 19:33:32 GMT</pubDate>
            <wfw:comment>http://nimblecoder.com/blog/comments/40.aspx</wfw:comment>
            <comments>http://nimblecoder.com/blog/archive/2007/09/28/do-you-remember-all-of-your-command-line-parameters.aspx#feedback</comments>
            <wfw:commentRss>http://nimblecoder.com/blog/comments/commentRss/40.aspx</wfw:commentRss>
            <trackback:ping>http://nimblecoder.com/blog/services/trackbacks/40.aspx</trackback:ping>
        </item>
        <item>
            <title>Command Line Clipboard</title>
            <link>http://nimblecoder.com/blog/archive/2007/04/04/Command-Line-Clipboard.aspx</link>
            <description>&lt;p&gt;I just needed to copy the output of the DOS command dir to another file. The usual mechanism is to send the output to a file, open the file, then copy the contents to the actual destination file. I was sure there must be an utility that would copy output in the command line to the clipboard and indeed I found such an utility. Kudos to Steve Kemp and his &lt;a href="http://www.steve.org.uk/Software/clipboard/" target="_blank"&gt;clipboard utility&lt;/a&gt;. I was able to do what I needed very easily:&lt;/p&gt;&lt;pre&gt;C:\&amp;gt;dir /s /b *.txt | clipboard -&lt;/pre&gt;
&lt;p&gt;Then just paste into &lt;a href="http://notepad-plus.sourceforge.net/" target="_blank"&gt;Notepad++&lt;/a&gt; or other application!&lt;/p&gt;&lt;img src="http://nimblecoder.com/blog/aggbug/18.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Van Slooten</dc:creator>
            <guid>http://nimblecoder.com/blog/archive/2007/04/04/Command-Line-Clipboard.aspx</guid>
            <pubDate>Wed, 04 Apr 2007 21:41:20 GMT</pubDate>
            <wfw:comment>http://nimblecoder.com/blog/comments/18.aspx</wfw:comment>
            <comments>http://nimblecoder.com/blog/archive/2007/04/04/Command-Line-Clipboard.aspx#feedback</comments>
            <wfw:commentRss>http://nimblecoder.com/blog/comments/commentRss/18.aspx</wfw:commentRss>
            <trackback:ping>http://nimblecoder.com/blog/services/trackbacks/18.aspx</trackback:ping>
        </item>
    </channel>
</rss>