Saturday, January 3, 2009

F# leads the transformation


What F# represents is a partitioning of the programming languages. And unlike previous partitions this is a transformative change. General purpose languages are being supplanted by a collection of domain specific languages. These domain specific languages will include a general purpose language but it will not be there to rule them all but rather to orchestrate them all.
F# is a native or natural functional language where objects are possible (but the objects may not feel native or natural). C# is an object oriented language. With the advent of LINQ, some functional capabilities are possible but most C# programmers have experienced the unnatural things LINQ is doing to the language.
So each language has a dominant paradigm, C# is an object oriented language and F# is functionally oriented. Each supports the other paradigm but using that paradigm is for one off or special purpose needs. LINQ allows C# programmers to off load a bunch of data processing tasks that are hard and / or tedious to code in any C derivative language. Likewise objects are available in F# in case you need to maintain state. But the more you need to maintain state the less the task you are working with is a functional oriented task.
Since we are 60+ years into programming, Bare-Naked-Ladies-Fans ("It's all been done") are sure to point out this has all been done before. This is a valid point as C++ and Perl demonstrate. Both languages have adapted and provide these and numerous other features. However both languages have purchased these abilities at ever increasing complexity. As the Ruby creator aptly points out C++ is constantly surprising him. For a hobbyist, surprise is fun. For a guy trying to get something done surprise is bad.
But leaving aside surprise, it is hard to feel like you know either of C++ of Perl in their entirety. All special purpose languages that succeed will share this fate. Every feature the language supports will require some complexity to implement it in the syntax. The future being unknowable will always mean some choices turn out to be less than perfect.
So as the general purpose languages evolve their complexity and internal contradictions will grow as well. The languages scream for a refactoring. But refactoring is the one tool no language can ever use. No matter how ill advised a feature, it cannot be removed because this would break countless programs. And refactoring is not the removal of one feature but the wholesale change of several features.
What history gave us was series of general purpose languages (C, C++, Perl, Java, C# and others) where an attempt was made to refactor to the perfect paradigm. The dot Net platform opens up a new way; several languages can interoperate on the same platform and in the same development environment. F# is the break out example because unlike the C# and VB.net interaction it implements a completely different programming paradigm.
The general purpose languages do not have to implement every hot new feature. They can develop side by side with the F# languages, leveraging their power without corrupting their own syntax.

Thursday, October 30, 2008

Brief: Powershell With Visual Studio 2008

Books:

Windows PowerShell Cookbook

Microsoft Windows Powershell Step by Step


 

Links:

Powershell Main Page

http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

Powershell Team Blog

http://blogs.msdn.com/Powershell/

UI Automation Article

http://msdn.microsoft.com/en-us/magazine/cc337896.aspx?pr=blog


 

Visual Studio Addins:

CodePlex project Powershell inside VS2008

http://www.codeplex.com/VSCmdShell

CodePlex project Powershell Debugger Visualizer

http://www.codeplex.com/PoshDebugVisualizer

Wednesday, October 29, 2008

Code: Powerscript to remove directory


 


 

$ReleaseList = Get-Content '.\ReleaseList.txt'

foreach($Directory in $ReleaseList)

{

Write-Host "Removing Directory: " $Directory

if (Test-Path -Path $Directory)

{    

remove-item -recurse $Directory

}

else

{

Write-Host "Directory does not exist: $Directory"

}    

}

Wednesday, October 22, 2008

Tuesday, October 7, 2008

Outline Microsoft Partner Competency Requirements

Microsoft Partner Competency

Competencies

  • Small Business
  • Advance Infrastructure Solutions
  • Business Intelligence
  • Custom Development Solutions
  • Data Management Solutions
  • Hosting Solutions
  • Information Worker Solutions
  • ISV/Software Solutions
  • Learning Solutions
  • Microsoft Business Solutions (Dynamics)
  • Mobility Solutions
  • Networking Infrastructure Solutions
  • OEM Solutions
  • Security Solutions
  • SOA and Business Process
  • Unified Communications Solutions


 

Requirements

  • Small Business
    • Small Business Sales and Marketing exam
    • One of three (four) technical exams
      • 70-282 deploy network
      • 70-236 Exchange Server 2007, Configure
      • 74-134 OEM Preinstall Kit
      • 70-631 Sharepoint 3.0, Configure
  • Advance Infrastructure Solutions
    • https://partner.microsoft.com/40012655
    • Specializations
      • Active Directory
        • Two Advanced MCP: MCSE, MCSD, MCDBA
        • One of four exams
          • 70-294 Planning 2003 Active Directory
          • 70-297 Design 2003 Active Directory
          • 70-640 Configure 2008 Active Directory
          • 70-647 Server 2008, Enterprise Manager
        • Three refs
      • Systems Management
        • Two Advanced MCP: MCSE, MCSD, MCDBA
        • One of four exams (increase to two, June 2009)
          • 70-400 SC Operations Manager, Configuring
          • 70-401 SC Configuration Manager, Configuring
          • 70-089 Systems Management Server 2003 (del. June 2009)
          • 70-290 Managing Server 2003 Environment (del. June 2009)
        • Three refs
      • Storage Solutions
        • Two Advanced MCP: MCSE, MCSD, MCDBA
        • One of eight exams
          • Exam 70-270—Installing, Configuring, and Administering Windows XP Professional
          • Exam 70-291—Implementing, Managing, and Maintaining a Windows Server 2003 Network Infrastructure
          • Exam 70-293—Planning and Maintaining a Windows Server 2003 Network Infrastructure
          • Exam 70-297—Designing a Windows Server 2003 Active Directory and Network Infrastructure
          • Exam 70-620—TS: Configuring Windows Vista Client
          • Exam 70-621—PRO: Upgrading your MCDST Certification to MCITP Enterprise Support
          • Exam 70-640—TS: Windows Server 2008 Active Directory, Configuring
          • Exam 70-642—TS: Windows Server 2008 Network Infrastructure, Configuring
        • Three refs
      • Windows Desktop Deployment
        • Two MCP
        • One of four exams
          • Exam 70-620; TS: Windows Vista, Configuring
          • Exam 70-621; PRO: Upgrading your MCDST Certification to MCITP Enterprise Support
          • Exam 70-622; PRO: Supporting and Troubleshooting Applications on a Windows Vista Client for Enterprise Support Technicians
          • Exam 70-624; TS: Deploying and Maintaining Windows Vista Client and 2007 Microsoft Office System Desktops
          • Exam: 70-656; TS: Configuring Microsoft Desktop Optimization Certification Pack
        • Three refs
  • Business Intelligence
    • Business Intelligence Platform
      • Two MCP
      • One of five exams
        • Exam 70-228—Installing, Configuring, and Administering Microsoft SQL Server 2000 Enterprise Edition
        • Exam 70-229—Designing and Implementing Databases with Microsoft SQL Server 2000 Enterprise Edition
        • Exam 70-431—TS: Microsoft SQL Server 2005—Implementation and Maintenance
        • Exam 70-445—TS: Microsoft SQL Server 2005 Business Intelligence—Implementation and Maintenance
        • Exam 70-446—PRO: Designing a Business Intelligence Infrastructure by Using Microsoft SQL Server 2005
      • Three refs


         

    • Performance Management
      • Two MCP

      • 70-556: TS: Microsoft Office PerformancePoint Server 2007, Applications.

      • Three refs
  • Custom Development Solutions
    • Two MCPD, MCSD, MCAD
    • Three refs
  • Data Management Solutions
    • Two MCP
    • One of eight exams
      • Exam 70-228—Installing, Configuring, and Administering Microsoft SQL Server 2000 Enterprise Edition
      • Exam 70-229—Designing and Implementing Databases with Microsoft SQL Server 2000 Enterprise Edition
      • Exam 70-431—TS: Microsoft SQL Server 2005—Implementation and Maintenance
      • Exam 70-441—PRO: Designing Database Solutions by Using Microsoft SQL Server 2005
      • Exam 70-442—PRO: Designing and Optimizing Data Access by Using Microsoft SQL Server 2005
      • Exam 70-443—PRO: Designing a Database Server Infrastructure by Using Microsoft SQL Server 2005
      • Exam 70-444—PRO: Optimizing and Maintaining a Database Administration Solution by Using Microsoft SQL Server 2005
      • Exam 70-447—UPGRADE: MCDBA Skills to MCITP Database Administrator by Using Microsoft SQL Server 2005
    • Three refs
  • Hosting Solutions
    • Two MCT, MCSA, MCAD, MCSD, MCSE, MCDBA
    • Sales: 75 processor or 3000 subscriber
    • Three refs
  • Information Worker Solutions


 

  • ISV/Software Solutions
    • Tested Software
    • Three refs
  • Learning Solutions
  • Licensing Solutions
    • License Delivery
      • Two MCP
      • One of two tests
        • Exam 70-671: Designing and Providing Microsoft Volume Licensing Solutions to Small and Medium Organizations
        • Exam 70-672: Designing and Providing Microsoft Volume Licensing Solutions to Large Organizations
      • Three refs
    • Software Asset Management
      • Two MCP
      • Exam 70-123: Planning, Implementing, and Maintaining a Software Asset Management (SAM) Program.
      • Three refs
  • Microsoft Business Solutions (Dynamics)
    • Microsoft Dynamics AX
    • Microsoft Dynamics C5 (Denmark only)
    • Microsoft Dynamics CRM
    • Microsoft Dynamics GP
    • Microsoft Dynamics NAV
    • Microsoft Dynamics POS
    • Microsoft Dynamics SL
  • Mobility Solutions
    • Two MCP
    • Both exams (after Feb 15 2009)
      • 70-500: TS: Microsoft Windows Mobile Designing, Implementing, and Managing
      • 70-540: TS: Microsoft Windows Mobile 5.0 - Application Development
    • Three refs
  • Networking Infrastructure Solutions
    • Two MCP
    • One of 12 exams
      • Exam 70-270—Installing, Configuring, and Administering Microsoft Windows XP Professional
      • Exam 70-282—Designing, Deploying, and Managing a Network Solution for the Small and Medium-Sized Business
      • Exam 70-290—Managing and Maintaining a Microsoft Windows Server 2003 Environment
      • Exam 70-291—Implementing, Managing, and Maintaining a Windows Server 2003 Network Infrastructure
      • Exam 70-293—Planning and Maintaining a Windows Server 2003 Network Infrastructure
      • Exam 70-294—Planning, Implementing, and Maintaining a Windows Server 2003 Active Directory Infrastructure
      • Exam 70-297—Designing a Windows Server 2003 Active Directory and Network Infrastructure
      • Exam 70-298—Designing Security for a Windows Server 2003 Network
      • Exam 70-299—Implementing and Administering Security in a Windows Server 2003 Network
      • Exam 70-350—Implementing Microsoft Internet Security and Acceleration (ISA) Server 2004
      • Exam 70-620—TS: Configuring Windows Vista Client
      • Exam 70-621—PRO: Upgrading your MCDST Certification to MCITP Enterprise Support
    • Three refs
  • OEM Solutions
    • Sell OS: 150 client OR 15 server
    • 2 MCP (or 1 and a Designed for Windows Server)
    • One test of 13


       

  • Security Solutions
    • Infrastructure Security Specialization
      • One MCP with one of:
        • Exam 70-350– Implementing Microsoft Internet Security and Acceleration (ISA) Server 2004
        • Exam 70-351– TS: Microsoft Internet Security and Acceleration (ISA) Server 2006, Configuring
        • Exam 70-557– TS: Microsoft Forefront Client and Server, Configuring
      • And one of
        • (ISC)2 Certified Information Systems Security Professional (CISSP)
        • (ISC)2 Systems Security Certified Practitioner (SSCP)
        • Information Systems Audit and Control Association (ISACA) Certified Information Systems Auditor (CISA)
        • ISACA Certified Information Systems Manager (CISM)
      • Second MCP with one of
        • Exam 70-350– Implementing Microsoft Internet Security and Acceleration (ISA) Server 2004
        • Exam 70-351– TS: Microsoft Internet Security and Acceleration (ISA) Server 2006, Configuring
        • Exam 70-557– TS: Microsoft Forefront Client and Server, Configuring
      • Three refs
    • Identity and Secure Access Specialization
      • One MCP with one of:
        • Microsoft Certified Systems Engineer (MCSE)
        • Microsoft Certified Systems Developer (MCSD)
        • Microsoft Certified Database Administrator (MCDBA) on Microsoft Windows Server 2003 or Windows 2000 operating systems
        • Microsoft Certified IT Professional (MCITP) Database Administrator

          Or, who has achieved one of the following third-party security certifications:
        • (ISC)2 Certified Information Systems Security Professional (CISSP)
        • (ISC)2 Systems Security Certified Practitioner (SSCP)
        • (ISC)2 Certification and Accreditation Professional (CAP)
        • Information Systems Audit and Control Association (ISACA) Certified Information Systems Auditor (CISA)
        • ISACA Certified Information Systems Manager (CISM)
        • ISACA Certified in the Governance of Enterprise IT (CGEIT)
      • And
        • Exam 70-294: - Planning, Implementing, and Maintaining a Microsoft Windows Server 2003 Active Directory Infrastructure
        • Exam 70-297: - Designing a Microsoft Windows Server 2003 Active Directory and Network Infrastructure
        • Exam 70-640: - TS: Windows Server 2008 Active Directory, Configuring
        • Exam 70-647: - PRO: Windows Server 2008, Enterprise Administrator
      • Second MCP with one of
        • Exam 70-294: - Planning, Implementing, and Maintaining a Microsoft Windows Server 2003 Active Directory Infrastructure
        • Exam 70-297: - Designing a Microsoft Windows Server 2003 Active Directory and Network Infrastructure
        • Exam 70-640: - TS: Windows Server 2008 Active Directory, Configuring
        • Exam 70-647: - PRO: Windows Server 2008, Enterprise Administrator
      • Three refs
  • SOA and Business Process
    • Two MCP
    • One of n tests
      • Exam 70-235—TS: Developing Business Process and Integration Solutions Using Microsoft BizTalk Server
      • Exam 70-300Analyzing Requirements and Defining Microsoft .NET Solution Architectures
      • Exam 70-310Developing XML Web Services and Server Components with Microsoft Visual Basic .NET and the Microsoft .NET Framework
      • Exam 70-320Developing XML Web Services and Server Components with Microsoft Visual C# .NET and the Microsoft .NET Framework
      • Exam 70-431TS: Microsoft SQL Server 2005 - Implementation and Maintenance
      • Exam 70-526—TS: Microsoft .NET Framework 2.0 - Windows-Based Client Development
      • Exam 70-529—TS: Microsoft .NET Framework 2.0 - Distributed Application Development
      • Exam 70-549PRO: Designing and Developing Enterprise Applications by Using the Microsoft .NET Framework
      • Exam 74-135Developing E-Business Solutions Using Microsoft BizTalk Server 2004
    • Three refs
  • Unified Communications Solutions


 


 

Resources

Monday, October 6, 2008

Brief: Microsoft Partner Competency

Microsoft Partner Competency

Competencies

  • Small Business
  • Advance Infrastructure Solutions
  • Business Intelligence
  • Custom Development Solutions
  • Data Management Solutions
  • Hosting Solutions
  • Information Worker Solutions
  • ISV/Software Solutions
  • Learning Solutions
  • Microsoft Business Solutions (Dynamics)
  • Mobility Solutions
  • Networking Infrastructure Solutions
  • OEM Solutions
  • Security Solutions
  • SOA and Business Process
  • Unified Communications Solutions


 

Requirements

  • Small Business
    • Small Business Sales and Marketing exam
    • One of three (four) technical exams
      • 70-282 deploy network
      • 70-236 Exchange Server 2007, Configure
      • 74-134 OEM Preinstall Kit
      • 70-631 Sharepoint 3.0, Configure
  • Advance Infrastructure Solutions
  • Business Intelligence
  • Custom Development Solutions
  • Data Management Solutions
  • Hosting Solutions
  • Information Worker Solutions
  • ISV/Software Solutions
  • Learning Solutions
  • Microsoft Business Solutions (Dynamics)
  • Mobility Solutions
  • Networking Infrastructure Solutions
  • OEM Solutions
  • Security Solutions
  • SOA and Business Process
  • Unified Communications Solutions


 


 

Resources

Brief: Microsoft Certified Partner

Certified Partner

Gold Partner

  • 120 Points
  • One competency minimum


 

Points Toward Partnership

  • 30 Per Compentency
  • 20 First Compentency bonus
  • 25 Small Business Competency
  • 40 (max) for Certified Professionals, ranges from 1 for MCP to 10 for Architect
  • 20 (max) for Customer References, 2 per customer
  • 70 (max) Tested Products
  • 20 (max) Sales OS
  • 60 (max) Sales Business Solutions
  • 20, + 20 bonus, Customer Satisfaction Surveys, bonus for Net Satisfaction
  • 20 (max ) ISV Royalty Program
  • 20 (max) Customer Assessments, 1 point per 5 assessments

Monday, September 29, 2008

Flash, Silverlight and JavaScript Performance

Here is an interesting head to head performance comparison of Flash and Silverlight:

http://www.itwriting.com/primetest/index.html


 

Both grind thru a less than optimal algorithm for finding a bunch of prime numbers.

Code is provided in another link so that you can see that it is apples to apples in terms of the code implemented.


 

On my machine, I saw an over two one advantage for Silverlight. Silverlight ran 1M prime checks in .8892285 seconds and Flash took 2.153 seconds for the same. This ratio held up over a range of values:


 

Number

Flash

Silverlight

Ratio

1 M

2.153

0.8892285

2.42119995

2 M

5.477

2.3092736

2.371741486

3 M

9.627

4.056832

2.373033934

4 M

14.324

6.0697226

2.359910155

5 M

19.692

8.3445947

2.359850982

6 M

25.895

10.802571

2.397114539

7 M

31.773

13.3872827

2.373371857

8 M

38.599

16.1520106

2.389733449

9 M

45.238

19.0887398

2.369878812


 

Another individual, Tobin Harris no doubt, has provided a JavaScript implementation at:

http://www.tobinharris.com/primes.html


 

It took 54 seconds for the 1M to run in JavaScript. But this result had to be thrown out because IE was constantly popping up a dialog asking if the JavaScript should be terminated. Although that is a lesson in and of itself that JavaScript running loose in the browser will face ever increasing scrutiny that diminishes it's usefulness.


 

Friday, September 26, 2008

What Does Agile Lack?


In this "The Register" article AgileDevelopmentLessonsLearned the truth comes out.

Agile is suffering from what it lacks, specifically:
Effective Management
Design and Analysis
Developer Tools








Wednesday, September 24, 2008

Roll Back on Team System Source Control

To perform the equivalent of a roll back with Team System Source Control, you must create a changeset that contains the contents of the roll back.

  1. Get specific version
  2. Right click the root of the Source Control tree and select compare
  3. Select all and then select reconcile from context menu
  4. Reconcil Folder Differences"
  5. On drop down menu "Files that do not have pending changes select "check out"
  6. Check in

Saturday, September 20, 2008

Code F#: Generate Pascal Triangles

The following is code written in F#. It generates a list of Pascal Triangles.

#light


 

let oddTriangle x = [x, ( x * x - 1) / 2, (x * x + 1) / 2]

let evenTriangle x = [ 2 * x, (x * x) - 1, (x * x ) + 1]


 

let pairTriangle x = [ oddTriangle (2 * x - 1), evenTriangle x ]


 

let numbers = [ 1 .. 100]


 

let perfectTriangles = List.map pairTriangle numbers


 

printf "%A" perfectTriangles


 

open System

Console.ReadKey(true)


 

Output:

[[([(1, 0, 1)], [(2, 0, 2)])]; [([(3, 4, 5)], [(4, 3, 5)])];

[([(5, 12, 13)], [(6, 8, 10)])]; [([(7, 24, 25)], [(8, 15, 17)])];

[([(9, 40, 41)], [(10, 24, 26)])]; [([(11, 60, 61)], [(12, 35, 37)])];

[([(13, 84, 85)], [(14, 48, 50)])]; [([(15, 112, 113)], [(16, 63, 65)])];

[([(17, 144, 145)], [(18, 80, 82)])]; [([(19, 180, 181)], [(20, 99, 101)])]]

Tuesday, September 9, 2008

Publishing to Blogger From MS Word


 

XML has always been difficult to get posted on blogger.

Here is a test case:

<?xml version="1.0"?>

<!--

Note: As an alternative to hand editing this file you can use the

web admin tool to configure settings for your application. Use

the Website->Asp.Net Configuration option in Visual Studio.

A full list of settings and comments can be found in

machine.config.comments usually located in

\Windows\Microsoft.Net\Framework\v2.x\Config

-->

<configuration>

<appSettings>

</appSettings>

<connectionStrings>

</connectionStrings>

    <system.web>

<sessionState

cookieless="true"

regenerateExpiredSessionId="true"

timeout="30" />


 

<!--

Set compilation debug="true" to insert debugging

symbols into the compiled page. Because this

affects performance, set this value to true only

during development.

-->

        <compilation debug="true"/>

        <!--

The <authentication> section enables configuration

of the security authentication mode used by

ASP.NET to identify an incoming user.

-->

        <authentication mode="Windows"/>

        <!--

The <customErrors> section enables configuration

of what to do if/when an unhandled error occurs

during the execution of a request. Specifically,

it enables developers to configure html error pages

to be displayed in place of a error stack trace.


 

<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">

<error statusCode="403" redirect="NoAccess.htm" />

<error statusCode="404" redirect="FileNotFound.htm" />

</customErrors>

-->

    </system.web>

</configuration>

Saturday, August 30, 2008

Separate Installs for Service and Desktop Application

The install originally lumped a Windows Service and a Desktop application together in one install.


This created a problem in the Install for Everyone. The Resilency was firing because of items in the Desktop application install. Specifically, Shortcuts installed per user were causing the Resilency install to fire when the second user logged in.

The Windows Service Installer does not handle this situation. And testing for the existence of the service causes a corrupt install state.

The less than ideal solution was to have separate installers for the two components.

Monday, August 25, 2008

Fixing: Error 1001. The specified service already exists

Fixing: Error 1001. The specified service already exists

Description: This error occurred during a per user install. The install was using the installer classes for services. The application was installed for all users. When a second user ran the installer classes tried to install the service again. This is fixed by testing for the existence of the service and skipping the service install if it already exists.

Sunday, August 24, 2008

Code: Test For Service Existence

Code To Test For Service Existence


bool serviceExists = false;
foreach ( System.ServiceProcess.ServiceController serviceController in System.ServiceProcess.ServiceController.GetServices())
{
if (serviceController.ServiceName == "TwentyTwentyLiveService")
{
serviceExists = true;
}
}

Saturday, August 23, 2008

Code: Determining If A User Is An Admin

There are several built in roles to help determine if the user is an Admin, User or Guest.


 WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();

WindowsPrincipal currentPrincipal = newWindowsPrincipal(currentIdentity);
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
if (currentPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
{
  //Administator code
}
if (currentPrincipal.IsInRole(WindowsBuiltInRole.User))
{
 // User code
}
if (currentPrincipal.IsInRole(WindowsBuiltInRole.Guest))
{
 // Guest or anonymous code
}

Friday, August 22, 2008

Level 2 Ignorance

"You do not know what you do not know."

This quote travels in IT/IS communities. The humor lies in the second of the double meanings. Not only do you not know some thing. But there are also things you don't know and you are unaware of what they are. These are the Level 2 in The Five Levels Of Ignorance.

There are two dynamics at work here on the one hand your Level 2 Ignorance is like a minefield of problems. On the other hand simply learning the name of things which you do not know transforms them into Level 1 Ignorance.

These dynamics illuminate why command and control systems, everything from communism to waterfall, fail. And methods which stress grassroots bottom up development, like Agile, have shown stunning results.

The command and control tries to plan everything beforehand while all the participants are in their highest states of Level 2 Ignorance. In fact because the organization is making no attempt to discover Level 2 Ignorance it is operating at Level 3 Ignorance.

In contrast, the bottom up methods stress experimenting and thus gaining knowledge of the problem space. This will result in ignorance being discovered. Which means these methods guard against Level 3 Ignorance and thus are eliminating Level 2 Ignorance as well.