Archive for January 2013

Best Practices for Preparing a Windows Virtual Machine

If you use Virtual Machines  in your lab (either with Hyper-V, VMWare Workstation, Virtual Box or other), you probably would love to have a list of steps to create a nice usable Virtual Machine. There are probably annoyances you have with your Virtual Machines that if you only knew how you could make them go away.

Also, it is frustrating to revert and have to redo settings, so knowing when is best to snapshot is also nice.

This document is to help you with just that: Creating the perfect Virtual Machine that is easy to use and avoids annoyances.

Note: I have been using VMWare Workstation since 2004. I have also used ESX, Virtual Box, and Hyper-V. I have worked with lab environments the most, but I have also worked with Virtual Machines in production and consider myself highly experienced.

Setting up a new Virtual Machine

Note: These steps provide general guidelines for when to snaphsot

  1. Create a new VM in your favorite Virtual Machine Manager.
    Note: I have used VMWare Workstation and ESX, Virtual Box, and Hyper-V and find I like them all fine.
  2. Use a very large disk image size, but do not choose to use allocate disk space now.
    Note: It is very frustrating to run out of space, so avoid this.
  3. Delete the floppy disk if the hardware configuration has one.
    Note: VMWare workstation will annoy you to no end if you leave a floppy on the system.
  4. Install Windows.
  5. Note: Do not activate or enter a Product Key if it allows you to skip this step.
    Note: I will use Windows Server 2008 R2 for this example.
  6. Create a snapshot called “Clean Install” here.
  7. Apply all patches and updates and driver updates.
  8. Add a secondary admin account in case you forget the primary admin account.
  9. Create Snapshot called clean install with Patches.

Windows Activation

If this is to be a base OS to use to clone other Virtual Machines, never activate the base Operating System, only activate a Virtual Machine after it has been cloned and after you are sure the Virtual Machine will not be discarded as lab Virtual Machines can be discarded often.

Activation can be a delicate balance. You don’t want to active every time, but at the same time, you don’t to revert a virtual machine and have to activate again. As soon as you know you will use the Virtual Machine for a while, activate it and snapshot it. Hopefully you never have to revert to a state before it was activated.

Making the Virtual Machine Easier to Use

Allow the Virtual Machine to Shutdown from the Login Screen

  1. Run gpedit.msc to launch the Local Group Policy Editor.
  2. Click to expand Computer Configuration | Windows Settings |Security Settings |Local Policies | Security Options.
  3. Scroll down in the right pane and right click on “Shutdown: Allow system to be shut down without having to log on” and choose Properties.
  4. Click Enabled and then OK.

Disable the shutdown event tracker

Virtual Machines, especially in a lab, shutdown often and unlike production machines, tracking these shutdowns is not necessary, so lets turn this off.

  1. Run gpedit.msc to launch the Local Group Policy Editor.
  2. Click to expand Computer Configuration | Administrative Templates |System.
  3. Scroll down in the right pane and right click on “Display Shutdown Event Tracker” and choose Edit.
  4. Click Disabled and then OK.

Disable Internet Explorer Enhanced Security Configuration

It is a pain in a lab to be prompted on every web site and for every download. Labs usually trade security for speed and agility.

  1. Go to Server Manager.
  2. Under Security Information on the right, click on Configure IE ESC.
  3. Set the values to Off.
  4. CLick OK.

Making the Virtual Machine more efficient

Turn off unnecessary services

If you need to run a lot of Virtual Machines and you need to squeeze every last bit of processor power out of your Virtual Machines, then they should only run the bare minimum they need to run.

Make a list of services you do not need but are running by default and disable them.

Note: Google search for “Services you can turn off in Server 2008” or whatever Operating System you are using.

Note: Often developers install Visual Studio, which includes SQL Express, and even if they never use SQL Express, they leave the service running. Stop such services and set them to manual so they don’t restart every reboot.

Software on the Virtual Machine

Install commonly used software

This one appears easy at first. However, it is different and there is more to it than you think.

  1. Make a list of software you use on your Virtual Machine. Here are a few examples:
    Notepad++
    7zip
    Acrobat Reader
    Firefox or Chrome (or your favorite browser)
    etc…
  2. Install your desired software.
  3. Update your software.
  4. Snapshot.

Delete Unique Values for Some Software

If you are going to use this as a base Virtual Machine to clone other Virtual Machines, then you don’t want anything that should be unique to be the same on each machine. Any software that has unique values should have those unique values removed. I’ve seen VPN software have unique values, the LANDesk Agent, etc… Remove these unique value before you Sysprep.

Using Virtual Machines with Active Directory

Using the Virtual Machine as a base

If you are going to create a base Virtual Machine that  you will clone often, just never join it to the domain. Instead, take the time to get the system perfect and sysprep the Virtual Machine so it will join the domain and prompt for a computer name on first boot.

Sysprepping a Virtual Machine

Sysprep is eithe ron the ISO or already installed.

  1. Run c:\windows\system32\sysprep\sysprep.exe.
    (Or find sysprep on the ISO)
  2. For System Cleanup Action, choose Enter System Out-of-Box Experience (OOBE)
  3. For Shutdown Options, choose Shutdown.
  4. Click OK.
  5. Snapshot once the machine has shutdown.

Prevent the Virtual Machine from ever losing a trust with the domain

When a Windows Virtual Machine is joined to the domain, reverting can cause a huge delay, especially if the snapshot is from a while ago, because a machine and the domain have a trust based on a system password (that is all under the covers) and this password can update. When reverting after the password has changed, your reverted state will no longer have a trust with the domain. This can be prevented.

  1. Join your machine to the domain.
  2. Apply DisablePasswordChange registry key.
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters]
    "DisablePasswordChange"=dword:00000001
    
  3. Create a snaptshot called “Machine joined to domain, DisablePasswordChange set”.

For more information, read this post: Virtual Machines, Snapshots, Domain Membership, and trust relationship

Change the domain password requirements to be easy or off

Again, in lab environments, security is often traded for speed and efficiency. You may want to allow passwords that are blank or two characters.

Also, because of snapshots and reverting it will eliminate Virtual Machine problems if passwords never expire.

If your Active Directory server is also in your lab, you may be able to change the passwords requirements to be easy or even turn them off completely. If your Active Directory server is not in your lab, you may have to live with them.

Don’t clone machines joined to the domain

If you clone a machine joined to the domain, you have created two machines that have the same domain membership, which should be unique. If one machine changes, it can break the trust relationship for the other machine.

The only time you should clone a machine that is joined to the domain is when you plan to discard the Virtual Machine you are cloning from.

Other Steps

Everyone has unique needs, and these are supposed to be general needs. You should document your needs and add them to your Virtual Machine creation.

If you have an idea that isn’t listed here and it is a general step, please comment.

C# Interview Questions

Comparing C# to other languages

  1. Q: What makes C# different than C++?
    A: C# has the CLR. C# has a Garbage collector, Properties, no globals, statics, C# has single inheritance with multiple interfaces while C++ has multiple inheritance. C# allows for the property syntax.
  2. Q: In what ways are C# and C++ the same?
    A: Object oriented. They both have classes, enums, methods, similar types (bool, int, double, etc…).

You can change the above to questions by replacing C++ with any language that candidate may say they are familiar with on their resume: Java, PHP, Ruby, Perl, Python. Of course, you may have to look up the answer. (Or not. You can usually tell by the interviewee’s confidence without knowing the answers yourself.)

C# Basics

Look the basics at least make sure they aren’t completely lying on there resume and they actually have at least done something in C#.

  1. Q: What is a benefit of having Properties over getters and setters?
    A: If you started using a variable and now you need to wrap code to have multiple actions on get and set, you don’t have to refactor as the Property has the same name and is used the same as a member variable.
    A: Readability. For syntactical purposes the getter and the setter always have to be in the same place in code because they are grouped. Other languages allow for the getter and setter to be anywhere in the object.
  2. Q: What is the syntax for instantiating an instance of each of the following:
    boolean
    A: bool b = true;
    integer
    A: int i = 0;
    real number
    A: double d = 1.0;
    array of integers
    A: int[] myArray = new int[10];
  3. Q: What is the standard way to create an empty string?
    A: string someEmptyValue = string.empty
  4. Q: Is a string mutable or immutable?
    A: immutable.
    Q: What does that mean when performing string manipulation functions?
    A: Any time the string changes, what really happens is a new string is created in a new location in memory.
  5. Q: Write both a for loop and a foreach loop that iterates through a List called myStrings.
    A:

    for (int i = 0; i < myStrings.Count; i++)
    {
        // put code here
    }
    
    foreach  (string str in myStrings)
    {
        // put code here
    }
    

    Q: Why would you use one method over another?
    A: Maybe you need the current id, so you use the for loop.

C# – Big O

  1. How to find the duplicate in an array using Big O of N?

C# – Open Ended Questions

  1. What design patterns do you use when developing? What design patterns do you hope to learn?
  2. What is the latest C# object or feature you have learned to use?
  3. Which areas of C# have your worked with? Which areas of C# have you not worked with?

C# – Security

  1. Q: What are some security related tools (executable files) included with .NET Framework?
    A: Caspol.exe (Code Access Security Policy Tool): Enables you to view and configure security policy for the machine policy level, the user policy level, and the enterprise policy level. In the .NET Framework 4 and later, this tool does not affect code access security (CAS) policy unless the element is set to true. For more information, see Security Changes in the .NET Framework.Cert2spc.exe (Software Publisher Certificate Test Tool): Creates a Software Publisher’s Certificate (SPC) from one or more X.509 certificates. This tool is for testing purposes only.Certmgr.exe (Certificate Manager Tool): Manages certificates, certificate trust lists (CTLs), and certificate revocation lists (CRLs).

    Makecert.exe (Certificate Creation Tool): Generates X.509 certificates for testing purposes only.

    Peverify.exe (PEVerify Tool): Helps you verify whether your Microsoft intermediate language (MSIL) code and associated metadata meet type safety requirements.

    SecAnnotate.exe (.NET Security Annotator Tool): Identifies the SecurityCritical and SecuritySafeCritical portions of an assembly.

    SignTool.exe (Sign Tool): Digitally signs files, verifies signatures in files, and time-stamps files.

    Sn.exe (Strong Name Tool): Helps create assemblies with strong names. This tool provides options for key management, signature generation, and signature verification.

    Ref: http://msdn.microsoft.com/en-us/library/dd233106.aspx

  2. Q: What are some libraries in the System.Security namespace?
    A:System.Security
    System.Security.AccessControl
    System.Security.Authentication
    System.Security.Authentication.ExtendedProtection
    System.Security.Authentication.ExtendedProtection.Configuration
    System.Security.Claims
    System.Security.Cryptography
    System.Security.Cryptography.Pkcs
    System.Security.Cryptography.X509Certificates
    System.Security.Cryptography.Xml
    System.Security.Permissions
    System.Security.Policy
    System.Security.Principal
    System.Security.RightsManagementQ: Can you discuss any of these libraries?
    A: See what they have to say and compare it to the web site on MSDN for these libraries.Q: Which libraries have you used? Tell my about a project you used that library in.
  3. What are some of the Key Security Concepts in C#?
    A: Security Permissions, Type Safety and Security,  Principal, Authentication, Authorization, Security Concerns for Keywords
    Ref: http://msdn.microsoft.com/en-us/library/z164t8hs.aspx
  4. What is Code Access Permissions?
    A: permission objects that are used to help protect resources and operations from unauthorized use. They are a fundamental part of the common language runtime’s mechanism for enforcing security restrictions on managed code.
    Ref: http://msdn.microsoft.com/en-us/library/h846e9b3.aspx

More to come . . .

A Spreadsheet for Sprint Planning

As a follow-up to Why your story estimation was off!“, I have created a spreadsheet for sprint management. This spread is not for helping you size a story, but instead it is for helping you determine how many stories your team can really do a single sprint.

It has the documentation on a separate sheet inside it.

Sprint Planning Spread Sheet Template.xlsx