Tuesday, March 18, 2008

Singularity

If you are into reading hardcore stuff about compiler techniques, jit, computer architecture etc. - just a couple of times are year, this topic from Microsoft Research is for you. Microsoft Research has created a new OS callled Singularity. The purpose of it is to investigate how an OS should be built from scratch if the goal is to provide dependability and trustworthiness. An interesting paper worth a read. The RDK - Resource Devlopment Kit is found here. And you can even get the runable code from Codeplex.

After reading the research paper Singularity: Rethinking the Software Stack (only 13 pages), it came to my mind that the architecture principle of channels - e.g. a process can only communicate with other processes through well-defined channels - could be used as an interprocess communication methods and make it much easier to build high-performance distributed systems. Imagine a situation where processes can simply be put anywhere (within the limits of the required bandwidth and latency). This would enable us to use a pool of resources much more efficient and e.g. simply offload the device you are using onto other devices nearby.

Vmware Virtualization Security Best Practices

Following security Best Practices is the key to maintaining strong security
in a virtualized IT environment. Read below to get guidance on implementing and
maintaining your virtual infrastructure with Best Practices for secure design,
deployment, operations and networking


Read more here on vmware's site.

Friday, March 14, 2008

Interact08 offer and possibility to win free pass to Teched / IT Forum 2009

If wou are working with Microsoft Unified Communications then Interact08 is the place to be.

Gurdeep Singh Pall just blogged about this at the OCS Team Blog

If you see yourself as a leader in the world of unified communications, I invite you to join me and my team at INTERACT 2008 as we look at how communications have evolved and how these industry changes position you for exciting new opportunities.

INTERACT 2008 is our exclusive event focused on building community among technology professionals, specifically, those who are evaluating and deploying Microsoft’s Unified Communications products. It will be held on April 8-10 in San Diego, California and will provide ample opportunities for attendees to network with one another. More than fifty members of our product  engineering teams will be there for interactive technical sessions, birds of feather sessions, and social events at what we’re calling “PubWorld”.  I’ll be there talking about what we’re seeing in the new world of communications technology and I’d like to hear what you are seeing and hear your feedback on our products.

If you see yourself as a leader in bringing Unified Communications technologies to your organization and taking your career to the next level, I’d encourage you to come.

Register today and use this special code [OCS08].

Be among the first 5 people to register, I will buy either your ITForum 2009 or TechEd 2009 registration pass.

See you in sunny San Diego!

Gurdeep

Register today! http://www.interact08.com/ with code OCS08

New version of the OCS 2007 Planning and Supportability Guides

Just noticed that the following documents important documents where updated to version 1.2

Office Communications Server 2007 Planning Guide

Used for planning and sizing your deployments

Office Communications Server 2007 Supportability Guide

This is the ultimate guide used when you want to check if this is a "supported scenario" e.g. collocating the CWA role with a Standard Edition Server.

Wednesday, March 12, 2008

Dr. Dobb's Excellence in Programming Award 2008

This year's recipient of the Dr. Dobb's Excellence in Programming Award is
the inventor of C++, Bjarne Stroustrup

Read it all here.

Friday, March 07, 2008

Planning Tool for OCS 2007

Microsoft has RTW'ed their planning tool for OCS 2007. I have seen and tested some of the beta's and it ended up being a neat little tool.

You will input parameters such as #users, regional distribution, demand for high availability features and end up with a topology drawing looking like this -

image

and this

image

One of the good features are all the links to resources like planning steps, hardware configurations, bandwidth capacity etc.

It's a very good start, but there are still room for improvement like the ability to export the drawings in Visio format and e.g. removing the requirement for high availability at the small sites.

If you want to do more detailed capacity planning and sizing the you should definitely take a look at the OCS 2007 resource kit - it contains very good chapters on this and Excel spreadsheets for doing your own sizing.

Find the tool here.

Global Computing Platform..

A good quote from Jungle Dave -

While the media is focused on the “social” revolution changing the face of the web through sites like MySpace and Facebook, the real revolution is happening behind the scenes as the Internet changes from being a global communication platform to a global computing platform

With challengers appearing in the market JungleDisk may support multiple backing stores.

Read it all here.

Monday, March 03, 2008

OCS 2007 Software Update Services updated

Besides updates to the localized version of OCS the following issues are fixed -

  • The audit logs for the request handler are truncated when read or write operations frequently occur in Microsoft Office SharePoint Server 2007.
  • You notice a new configuration setting that is named "LogFlushSizeThreshold." This setting is added to the "Config Settings.xml" file.
  • The "thread abort Http" exception causes the upload process to stop when you try to upload the .cab files on the Communications Server 2007 Management Console.

Find the download here and the accompanying KB here.

2008 Scripting Games, Solution 10

# Advanced Event 10: Blackjack!
# http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent10.mspx

# -ShowValue is an aid in testing the script
param([switch]$showValues,$dealerColor=$host.ui.RawUI.ForegroundColor,$playerColor=$host.ui.RawUI.ForegroundColor)

# Define cards and their values, prepare for double-value cards (the Ace), but I did not implement the
# logic for playing with it
$cards="Hearts","Diamonds","Spades","Clubs" | % {
$suite=$_
"Ace,11,1","Two,2","Three,3","Four,4","Five,5","Six,6","Seven,7","Eight,8","Nine,9","Ten,10","Jack,10","Queen,10","King,10" | % {
$card="" | select Name,Rank,Suite,Value,Value2
$Card.Rank,$Card.Value,$Card.Value2=$_.split(",")
$card.Name=$Card.Rank + " of $suite"
$card.Suite=$suite
$card
}
}


# Shuffle (using sort-random) and place in stack - love the ability to use .net :D

[Collections.Stack] $cards=$cards | sort {(new-object random).next()}

# Show a hand
function ShowCards([switch]$dealer) {
begin {
""
if ($dealer.ispresent) {
$color=$dealerColor
write-host -foreground $color "Dealer's cards:"
}
else {
$color=$playerColor
write-host -foreground $color "Your cards:"
}
$sum=0
}
process {
if ($showValues.ispresent) {
write-host -foreground $color ("{0} ({1})" -f $_.name,$_.value)
}
else {
write-host -foreground $color $_.name
}
$sum+=$_.value
}
end {
if ($showValues.ispresent) {
write-host -foreground $color ("Total {0}" -f $sum)
}
}
}

# Stay or hit function
function Ask{
write-host -nonewline "Stay (s) or hit (h) ?"
do {
$key=$host.ui.rawui.ReadKey("noecho,includekeydown").character
} until ($key -eq "s" -or $key -eq "h")
write-host $key
$key
}

# Sum up the hand
function value{
begin {
$sum=0
}
process {
$sum+=$_.value
}
end {
$sum
}
}

$player=@()
$dealer=@()

# Start dealing
$player+=$cards.pop()
$player+=$cards.pop()
$player | ShowCards
$playervalue=$player | value

# And the dealer
$dealer+=$cards.pop()
$dealer | ShowCards -dealer
# Second card is hidden
$dealer+=$cards.pop()
$dealervalue=$dealer | value

# Player's turn

# Continue dealing until gt 21 or 'stay'
while ((ask) -eq "h") {
$player+=$cards.pop()
$player | ShowCards
$playervalue=$player | value
if ($playervalue -ge 21) {
break
}
}

"You have $playervalue"
""
$dealer | ShowCards -dealer
""

if ($playervalue -gt 21) {
"Over 21. Sorry you loose"
}
elseif ($playervalue -eq 21) {
"Black Jack. You win"
}
elseif ($dealervalue -ge $playervalue) {
"Dealer has $dealervalue. Sorry you loose"
}
else {
# Dealer playes, must continue until player is defeated, black jack or exceeds 21
while ($dealervalue -lt $playervalue) {
$dealer+=$cards.pop()
$dealer | ShowCards -dealer
$dealervalue=$dealer | value
}
if ($dealervalue -gt 21) {
"Dealer has over 21. You win"
}
elseif ($dealervalue -eq 21) {
"Dealer has Black Jack. Sorry you loose"
}
elseif ($dealervalue -ge $playervalue) {
"Dealer has $dealervalue. Sorry you loose"
}
else {
"Dealer has $dealervalue. You win"
}
}

2008 Scripting Games, Solution 9

# Advanced Event 9: You're Twisting My Words
# http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent9.mspx

# Load text from file
$text=type c:\scripts\alice.txt
# Split into words (space delimited)
# Convert each word to a character array, reverse the array and construct a string again
$all=$text.split(" ") | % { $w=$_.tochararray(); [array]::reverse($w); [string]::join("",$w) }
# Finally, convert all words a line of text using the default $OFS delimiter (which is space)
"$all"

2008 Scripting Games, Solution 8

# Advanced Event 8: Making Beautiful Music
# http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent8.mspx

param($minminutes=75,$maxminutes=80,$artistMax=2)

if ($minminutes -ge $maxminutes) {
throw "Min minutes must be smaller than max minutes"
}
# If only this file had header rows!
# Load the csv, convert each line to an object and
# convert the duration to timespans
$songs=type c:\scripts\songlist.csv | % {
$obj="" | select Artist,Song,Duration
# Multi assignment - each variable gets a value assigned
$obj.Artist,$obj.Song,$duration=$_.split(",")
$min,$sec=$duration.split(":")
$obj.Duration=new-timespan -min $min -sec $sec
$obj
}
# Randomizer
$random=new-object random

do {
$listOk=$false
write-verbose "Generating list.."
# Randomize the list
$songs=$songs | sort {$random.next()}

# Pick only $artistMax numbers per artist
$songs=$songs | group Artist | % {
$_.group[0..($random.next($artistMax))] | % { $_ }
}

# See if we can build a list
$burnSongs=@()
$burnDuration=New-Timespan
$brokeOut=$false
foreach($song in $songs) {
$burnSongs+=$song
# += does not work on timespan objects
$burnDuration=$burnDuration+$song.Duration
if ($burnDuration.totalMinutes -ge $minminutes -and `
$burnDuration.totalMinutes -le $maxminutes) {
# Is with-in constraints, exit
$listOk=$true
$brokeOut=$true
break
}
elseif ($burnDuration.TotalMinutes -gt $maxminutes) {
$brokeOut=$true
break # No need to spent more time on this list
}
}
if (!$brokeOut) {
throw "Songlist does not contain material that can fullfill the constraints"
}
} until ($listOk)
# Output duration as m:ss - the default hh:mm:ss does not seem to meet the requirements
$burnSongs | Format-Table Artist,Song,@{Label="Duration"; `
Expression={"{0}:{1:00}" -f $_.Duration.Minutes,$_.Duration.Seconds}}
# And again m:ss format
"Total music time {0}:{1}" -f [math]::truncate($burnDuration.TotalMinutes),$burnDuration.Seconds

2008 Scripting Games, Solution 7

# Advanced Event 7: Play Ball!
# http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent7.mspx

# Teams - as character array
$teams="ABCDEF".toChararray()
# Create combinations, use $c to start each iteration one step futher in the array
$plays=$teams | % {$c=0} { $team=$_; $c++; $teams[$c..$teams.length] | % { "$team vs. $_" } }
# Randomize - the easy way
# $plays | sort {(new-object random).next()}

# Randomize - and make sure the plan is more realistic by adding two additional
# constraints: Make sure -
# - no team plays more than 3 matches in a row and
# - a team is not left idle for 40% of a tournement
[int] $idle=[math]::truncate($plays.count*0.4)

do{
$AllTeamsOk=$true
# Randomize / shuffle deck
$plays=$plays | sort {(new-object random).next()}

# Use foreach statement as break is used
foreach($team in $teams) {
# Build a list of Y/.'s for each game a use a regex to look for consecutive matches
$teamplays=$plays | % {$g=""} { if ($_ -match $team) { $g+="Y" } else {$g+="."} } {$g}
write-debug "$team $teamplays"
if ($teamplays -match "y{3}") {
write-verbose "bad $team plays 3 matches in a row - reshuffle"
$AllTeamsOk=$false
break
}
elseif ($teamplays -match "\.{$idle}") {
write-verbose "bad $team is too much idle in the tournement - reshuffle"
$AllTeamsOk=$false
break
}
}
}
until ($AllTeamsOk)
$plays