Tuesday, March 18, 2008
Singularity
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!
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
Read it all here.This year's recipient of the Dr. Dobb's Excellence in Programming Award is
the inventor of C++, Bjarne Stroustrup
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 -
and this
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.
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