Quickly deploy Windows 8.1 Enterprise on multiple computers at no cost

This guide will show you how to deploy Windows 8.1 on multiple computes at no cost by using only free tools and some common sense.

The case: you just received 10 computer desktops to prepare for a client, and the client asked to preinstall some software for him. Standard installation of Windows 8.1 Enterprise naturally and notepad++, visual studio 2013 (msdn version from the client), office 2013 (licenced version form the client), some visual studio plugins, Sql Server Express… wait this is already a good list and will take an amount of time. The solution: just install one machine do the complete setup of the applications and take a clone of the disk and deploy that clone at no cost.

In this first part we will get the tools for doing this job:

  1. CloneZilla as disk cloner
  2. PowerShell (version 4 Is standard in Windows 8.1)
  3. InfraRecorder

Getting CloneZilla and creating a bootable media for it:

  1. Download here: http://clonezilla.org/downloads.php
  2. Use InfraRecorder to burn the ISO to a cd or dvd

Prepare Windows 8.1 for clonage:

  1. I assume here that all additional software is installed
  2. Run the PowerShell as administrator and execute the following command: Get-AppxPackage | Remove-AppxPackage

    It is important to execute this command because an error could rise when we are going to sysprep Windows 8.1. More information about this here: How To Fix sysprep fatal error in Windows 8.1.

  3. Hit he windows + r key, type sysprep in the run command and execute it as administrator
  4. In the System Cleanup Preparation Tool select
    1. Enter System Out-of-Box
    2. Generalize
    3. Shutdown

At this point Windows will clean itself, if it reboots shut down the pc, we first need to clone.
To go the easy way we are going to clone from disk to disk, this is quickest method I’ve tested, needs just more handwork. In preparation of this you should find out the identification number of your source disk and your target disk (could be the serial number for example). A nice tip is also is to disconnect all drives and only leaving those needed.

Disk to Disk copy:

  1. Boot from the CloneZilla cd
  2. Select CloneZilla Live
  3. Select English for the language
  4. Select Don’t touch keymap
  5. Select Start ConeZilla
  6. Select Device-to-Device
  7. Select Beginner mode
  8. Select Device to LocalDisk
  9. Choose source disk
  10. Choose target disk
  11. Confirm all first selected options and accept all warnings
  12. Cloning will begin
  13. At the end do the process over for other disks, and insert the cloned into the desktop

You could now check the cloned disk and install it in a new desktop, system will boot up and you will have a fresh Windows 8.1 !
ConeZilla official documentation: http://clonezilla.org/fine-print-live-doc.php?path=./clonezilla-live/doc/03_Disk_to_disk_clone/00-prepare-clonezilla-live.doc#00-prepare-clonezilla-live.doc

Tagged with: , , ,
Posted in Windows 8

The Scrumban environment, observed mistakes and influences.

I have been working in different mission the last couple of years with the focus on an Agile way of working. Myself have done mistakes in interpreting the Agile world and the surrounding frameworks as Scrum, Kanban and lately Scrumban. It is more the later one for who I will discuss some observations.

The group of people with who I was working with received a course about Scrumban for 3 days, presentation of its history, theory, benefits, the companies that succeeded (where are those who didn’t) and finally a nice workshop that pepped up the whole group resulting in a nice Scrumban board. Yes we are ready (or not) to rock.
Before we continue I have to say that the group of people is in fact a team that works on demands that are simple and fast to fix, usually 1-4 days, including all the steps from analysis to test and go to production. We can call the group with the ugly word “Maintenance team or Development support team”.

First thing that I found not right about our processing was the fact that the Scrum Master Role was a pudding of a Project Manager and a Scrum Master, and here I observed already the influence of external partners, so the order of task or priorities where already not being followed, I suppose that flexibility exists and political reasons are there.
The above didn’t create a lot of frustration in the team, as it where no Scrum purists, so for the weeks after the start of the new stuff nothing did changed really, just another way of having a view of work in progress. And at that moment you can clearly see that if not all team members wants’ to enact the basic principles of scrum (even if we do scrumban you can at least inform you about Agile or Scrum no?) and try them, you are finally not going in the right direction. The motivation level was too low to get there where I thought we were going to go. For me a team needs to be more kicked in the ass sometimes.

Some of our team members were stuck with long running demands, like they were not really part of the team. This caused by request of an external partner to let Joe do the work for them on that part of their project. There is no issue in that but if the task isn’t sliced in subtasks that can fit in the Scrumboard then this isn’t maybe a task for this team? So this results in not sharing the knowledge to other team members, other team members not able to join forces. We missed the publication to external partners how we process and what we can process.

Mistakes we did where starting on demands that where not completely clear, not having a product owner(s), identifying demands that looked small in scope but who revealed to be much larger and it took a long time to start having a better backlog.

Finally we succeeded in making things better, a lot of lessons learned and at the end being able to teach external partners what we really did and needed from them.

Tagged with: , , , ,
Posted in Agile, Scrum

New certificate: PSD from Scrum.org

Being working as a development team member for 2 years I thought it was time to pass the Professional Scrum Developer cert.

The readings I took to pass this where the scrum guide ant the following topics:

test harness

mock object

revision control/version control

Continuous integration

code coverage http://en.m.wikipedia.org/wiki/Code_coverage

user story http://en.wikipedia.org/wiki/User_story

branching http://en.wikipedia.org/wiki/Branching_(revision_control)

cyclomatic complexity http://en.wikipedia.org/wiki/Cyclomatic_complexity

cross-cutting concerns http://en.wikipedia.org/wiki/Cross-cutting_concern

code refactoring http://en.wikipedia.org/wiki/Code_refactoring

Dry – don’t repeat yourself http://en.wikipedia.org/wiki/Don%27t_repeat_yourself

Wet- write everything twice

unit testing http://en.wikipedia.org/wiki/Unit_testing

Integration testing http://en.wikipedia.org/wiki/Integration_testing

test driven development http://en.wikipedia.org/wiki/Test_driven_development

acceptance test driven development http://en.wikipedia.org/wiki/Acceptance_test-driven_development

behavior driven development http://en.wikipedia.org/wiki/Behavior_driven_development

https://msdn.microsoft.com/en-us/magazine/gg490346.aspx

Behaviour Driven Development

black box testing http://en.wikipedia.org/wiki/Black_box_testing

white box testing http://en.wikipedia.org/wiki/White_box_testing

smoke testing http://en.wikipedia.org/wiki/Smoke_testing_(software)

burn charts http://en.wikipedia.org/wiki/Burn_down_chart

Posted in Scrum

Wpf NumericTextBox

This simple code provides a complete NumericTextBox. Whe arey blocking paste operations and the space character.

public class NumericTextBox : TextBox
    {
        public NumericTextBox()
        {
            PreviewTextInput += NumericTextBox_PreviewTextInput;
            PreviewKeyDown += NumericTextBox_PreviewKeyDown;
            DataObject.AddPastingHandler(this, OnPaste);
        }

        void NumericTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Space) { e.Handled = true; }
        }

        void NumericTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            int outValue;
            e.Handled = !int.TryParse(e.Text, out outValue);
        }

        private void OnPaste(object sender, DataObjectPastingEventArgs e)
        {
            var pastedText = e.DataObject.GetData(DataFormats.Text) as string;
            int outValue;
            var cancel = !int.TryParse(pastedText, out outValue);
            if (cancel) e.CancelCommand();
        }
    }
Tagged with: ,
Posted in WPF

New certificate: PSM from Scrum.org

Finally had time to complete my Professional Scrum Master cert.
For those willing to pass it or to understand the “Scrum”, here some tips:

  • Read the Scrum Guide, which lays out the overall Scrum framework.
    Take the Scrum Open Assessment.
  • Visit the Scrum.org forums.
  • But watch out for articles who aren’t correct about Scrum!
Tagged with: ,
Posted in Scrum

DatePicker Control: Force user to select a date with the date picker popup

Here is an easy way to force the user to select a date using the datepicker popup control. Just set the TextBox property to readonly, and you will still be able to copy it’s text.

The code in XAML:

<DatePicker>
    <DatePicker.Resources>
        <Style TargetType="DatePickerTextBox">
            <Setter Property="IsReadOnly" Value="True"/>
        </Style>
    </DatePicker.Resources>
</DatePicker>
Tagged with: , , ,
Posted in Uncategorized, WPF

Stretching Content in an Expander Header

The code to let’s the expander header stretch, very use full if you have a left, right header text and a line beneath them.
And the extra it needs no code behind, all done in xaml!

<Expander>
  <Expander.Header>
    <TextBlock
      Text=”I am header text…”
      Background=”Blue”
      Width=”{Binding
        RelativeSource={RelativeSource
          Mode=FindAncestor,
          AncestorType={x:Type Expander}},
        Path=ActualWidth}”
      />
  </Expander.Header>
  ...
</Expander>

More information can be found here (John Smith On Wpf).

Tagged with:
Posted in Uncategorized, WPF

WPF DataGrid DataGridTextBoxColumn Strikethrough styling

An example on how to strikeout text inside a DataGRidTextBoxColumn only based on xaml code using one binding.

The elementstyle is set and set to target the TextBlock (will be present when the application runs), I binded the DataTrigger on the IsDeleted property of my collection with the trigger only executing when the Value is ‘true’.

The xaml code:

<DataGridTextColumn Binding="{Binding Description}" Header="Description"  IsReadOnly="True">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
	    <Style.Triggers>
	        <DataTrigger Binding="{Binding IsDeleted}" Value="true">
		    <Setter Property="TextDecorations" Value="Strikethrough" />
		</DataTrigger>
	    </Style.Triggers>
	</Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
Tagged with: , ,
Posted in .Net, WPF

How to implement DataGridComboBoxColumn

For every one with this question I will redirect you to this post http://waf.codeplex.com/discussions/400140 .

Saved me again a lot of time.

Tagged with:
Posted in .Net, WPF

Simple Favorites combobox handling with knockoutJs

An example how to bind favorites to a html select element and handling the selectedItem and the input field to refresh for the favorites FilterText. This example also includes the usage of the knockoutJs for each looping mechanism.

Html page


<div>
    <label for="lst-favorite">Favorite</label>
    <select id="lst-favorites" data-bind="foreach: Favorites, value: SelectedItem">
        <option data-bind="text: Description, value: ID"></option>
    </select>
</div>
<div>
    <label for="txt-filtertext">Search</label>
    <input type="text" id="txt-filtertext" data-bind="value: SelectedText()" />
</div>

Javascript (using jquery, knockout and knockout.mapping)


var dataContext = { Favorites: ko.observableArray(), SelectedItem: ko.observable(),SelectedText: ko.observable()
};
$(document).ready(function () {
    // Get favorites from user
    var favorites = [ { Description: 'Favorite 1', ID: 1, FilterText: 'charly'
        }, 
        { Description: 'Favorite 2', ID: 2, FilterText: 'maxim' }
    ];
    // Set context
    var favoritesViewModel = ko.mapping.fromJS(favorites);
    dataContext.Favorites = favoritesViewModel;
    dataContext.SelectedText(favoritesViewModel()[0].FilterText());
    // Subscribe to selectedOption so we know when it's changed
    dataContext.SelectedItem.subscribe(function (newValue) {
        // If we have selected an option go get the suboptions
        if(newValue) {
            var selected = ko.utils.arrayFirst(dataContext.Favorites(), function (item) {
                if(item.ID() == newValue) { return true; }
            });
            if(selected) { dataContext.SelectedText(selected.FilterText()); }
        } 
    });
    // Apply bindings
    ko.applyBindings(dataContext, document.getElementById('frm-favorites'));
});

Tagged with: ,
Posted in JavaScript, jQuery, knockoutjs, Uncategorized