Tricking the HP WHS update to run on original WHS machines

Here is the article on how to install the update on the EX47X machines.

When HP released the HP MediaSmart Server 2.5 Update for the EX48x machines, they also [1] announced the full software would not be available to first generation users due “to hardware differences” anhd “the underlying software architecture”. Based on that statement, Nigel Wilks (Cougar) and Alex Kuretz (Yakuza) started work on a way[2] to make the update available to EX47x owners, dubbed “SanEncore” after the code names for the EX47x (San Juan) and the EX48x (Encore).

Cougar and Yakuza have also developed a Windows Home Server Add-In to fake the Update package into thinking it is running on a 2.1 machine, and handles some of the missing configuration items so that the 2.5 update is sucesful.

CSLA 3.5 Child and Parent Patterns

From this post:
http://forums.lhotka.net/forums/thread/25658.aspx

Child pattern:

[Serializable]
public class Child : BusinessBase<Child>
{
  internal static Child NewChild()
  {
    return DataPortal.CreateChild<Child>();
  }

  internal static Child GetChild()
  {
    return DataPortal.FetchChild<Child>();
  }

  private Child()
  {
    MarkAsChild();
  }

  private void Child_Create()
  {
    // initialize new child here
  }

  private void Child_Fetch()
  {
    // load child data here
  }

  private void Child_Insert()
  {
    // insert child data here
  }

  private void Child_Update()
  {
    // update child data here
  }

  private void Child_DeleteSelf()
  {
    // delete child data here
  }
}

Editable root pattern:

[Serializable]
public class RootParent : BusinessBase<RootParent>
{
  // other class code here ...

  protected override void DataPortal_Insert()
  {
    using (SqlConnection cn = new SqlConnection(...))
    {
      // insert parent data here

      FieldManager.UpdateChildren();
    }
  }

  protected override void DataPortal_Update()
  {
    using (SqlConnection cn = new SqlConnection(...))
    {
      // update parent data here

      FieldManager.UpdateChildren();
    }
  }
}

Editable Root List:

[Serializable]
public class ChildList : BusinessListBase<ChildList, Child>
{
  // other class code here ...

  protected override void DataPortal_Update()
  {
    using (SqlConnection cn = new SqlConnection(...))
    {
      Child_Update();
    }
  }
}

Editable Child List:

[Serializable]
public class ChildList : BusinessListBase<ChildList, Child>
{
  internal ChildList()
  {
    MarkAsChild();
  }

  // other class code here ...
}

If you use the DataPortal methods for creating the child objects (i.e. FetchChild) then you don’t have to bother with the MarkAsChild() stuff.

Turn an Enum into a list in VB.Net with optional CSLA

From time to time you might have an enum that you want to databind to something as if it were a list, so I wrote some classes that turn an Enum into a list that you can databind. 

I created ways to do this in CSLA and also w/o CSLA.  I made the non-CSLA versions 1 work so that you can either use a sub class, or just use generics when defining the type of your list.  You can do the same with the CSLA versions if you want by changing some of the generics, but I didn’t bother.


'*** csla
Dim cslaList As MyTestTypeList = MyTestTypeList.GetList

'*** non-csla with inherited subclass and without
Dim list As New MyTestTypeList2
Dim list2 As New EnumList2(Of MyTestType)


'*** enum we are using
Public Enum MyTestType
something = 1
here = 2
ok = 3
End Enum

'*** csla
<Serializable()> _
Public Class MyTestTypeList
Inherits EnumList(Of mytesttype, MyTestTypeList)

End Class
<Serializable()> _
Public Class EnumList(Of T As Structure, R As EnumList(Of T, R))
Inherits Csla.NameValueListBase(Of String, Integer)

Public Shared Function GetList() As R
Return Csla.DataPortal.Fetch(Of R)()
End Function

Protected Sub New()
' require use of factory method
End Sub

<Csla.RunLocal()> _
Public Overloads Sub DataPortal_Fetch() 'ByVal criteria As Object)
Me.IsReadOnly = False
For Each item As T In [Enum].GetValues(GetType(T))
Dim name As String = [Enum].GetName(GetType(T), item)
Add(New Csla.NameValueListBase(Of String, Integer).NameValuePair(name, [Enum].Parse(GetType(T), name)))
Next
Me.IsReadOnly = True
End Sub
End Class

'*** non-csla
Public Class MyTestTypeList2
Inherits EnumList2(Of MyTestType)

End Class

Public Class EnumList2(Of T As Structure)
Inherits List(Of EnumListItem)

Public Structure EnumListItem
Dim Name As String
Dim Value As Integer
Public Sub New(ByVal name As String, ByVal value As Integer)
Me.Name = name
Me.Value = value
End Sub
End Structure

Public Sub New()
For Each item As T In [Enum].GetValues(GetType(T))
Dim name As String = [Enum].GetName(GetType(T), item)
Add(New EnumListItem(name, [Enum].Parse(GetType(T), name)))
Next
End Sub

End Class

IBM Customer Service

This chat takes place after I have already chatted with a different support group, called the IBM parts divions, and the IBM tech support division:

Mohammed: Thank you for accepting our chat service, how may I assist you?
you: When I customize an x3500, at last screen it says: (5652) Planar Base [$699.00] is required for this configuration and has been added for you.
you: What is Planar Base and what about my configuration makes it a requirement?
Mohammed: Is this for yourself (your company) or a client of yours?
you: mysefl
Mohammed: I see. I’m not too familiar with the planar base. I can have a specialist contact you to further discuss this need of yours
you: ok. How long does that normally take?
Mohammed: our usual turnaround is 48 hours
Mohammed: however we can try to have somebody contact you by end of day tomorrow
Mohammed: but I can’t make any promises
you: ok my number is (630) 708-1234
Mohammed: May I have your full name, telephone number, email address, job title, company name and physical address?
you: Chris May, (630) 708-1234, cmay@RealNameRemoved.com that should be good
Mohammed: unfortunately without all the information requested above, I will not be able to have a specialist contact you
you: ok forget it I’ll just buy a Dell

UPDATE: I did buy a Dell.  Stupid IBM couldn’t have someone take 5 minutes and answer a question for someone who wanted to give them $3000. 

WHS Backup is waiting on cleanup

Today I was trying to do a backup to my WHS and I was getting the message on my client:

Backup is waiting on (cleanup).

After quite a long time, it was still on this message.

I did some investigating on the server and saw that 45 minutes earlier my server had kicked off a backup cleanup process.  This was indicated in the event viewer under “Homeserver”. 

Task Manager also showed whsbackup.exe doing a lot of work.

So, if you run into this, just wait a bit and when the server is done with the cleanup the client backup will start like normal.