Sunday, December 14, 2008

Domain Driven Design by Eric Evans


Domain-Driven Design by Eric Evans
This is a basic summary of the main points of this book. It provides some good tips on the software development process and some good pattern applications as well.

Premise of book
1. For most software projects, the primary focus should be on the domain and domain logic
2. Complex domain designs should be based on a model.


Part I - Putting the Domain Model to Work

Chapter 1 - Crunching Knowledge

Ingredients of Effective Modeling
1. Binding the model and the implementation - crude model type created and changed iteratively
2. Cultivating a language based on the model -explanations required between the software team and business
3. Developing a knowledge-rich model - captures knowledge of various kinds
4. Distilling the model - testing concepts and removing those which don't fit anymore
5. Brainstorming and experimenting

Chapter 2 - Communication and the Use of Language

When building your model use language that both sides(Development & Business) understand.
This is called "Ubiquitous language"
This helps make the model more useful for the conversation between development and business.

Chapter 3 - Binding Model and Implementation

A Domain Driven design calls for a model that doesn't just aid early analysis but is the very foundation for the design.
Tightly relating the code to an underlying model gives the code meaning and makes the model relevant.


Chapter 4 - Isolating the Domain

Give a Shipping Lane sample application with 4 tiers (User Interface, Application, Domain, and Infrastructure)
Layers can communicate down but not up.

Chapter 5 - A Model Expressed in Software

Introduce different types of objects
Entity Objects - objects defined by their identity(ie. key), can change, change state
Value Objects - objects that represent things that do not change, immutable (ie. an address)

3 attributes of a good service
1. operation relates to a domain concept that is not a natural part of an entity or value object
2. interface is defined in terms of other elements of the domain model
3. operation is stateless

Modules(aka Packages, namespaces)
grouping classes that are cohesive

Chapter 6 - The Life Cycle of a Domain Object
Talking about Aggregate Objects
Factories - Helping simpify the knowledge required to create complex objects
- each factory operation should be atomic
- the factory will be coupled to its arguments

Repositories
How to provide access to globally accessible objects
Repositories advantages include
- present clients with a simple model for obtaining persistent objects and managing their life cycle
- decouple application and domain design from persistence technolgoy, database,....
- communicate design decisions about object access
- allow easy substitution of a dummy implementation, for use in testing

Factory handles the beginning of an object's life; a Repository helps manage the middle and the end.

Chapter 7 - Using the Language: An Extended Example

An example of refinements in developing a Model-Driven Design via a Cargo Shipping System
Isolating the Domain, Distinguishing Entities and Value Objects, Aggregate Boundaries

Part III Refactoring Toward Deeper Insight

Chapter 8 - Breakthrough
Each refinement of code and model gives devlopers a clearer view.
This clarity creates the potential for a breakthrough of insights
Work on refactoring may not show much progress initially but often eventually leads to a breakthrough

Chapter 9 - Making Implicit Concepts Explicit
Listen to the language the domain experts use. These are hints of a concept that might benefit the model.
Scrutinize Awkwardness in language describing the model.
There may be a missing concept
Descibed patterns such as Specification - testing objects for certain criteria

Chapter 10 - Supple Design
Intention-Revealing Interfaces - better expression
Side-Effect-Free Functions - make safe and simple
Assertions - make side effects explicit
Standalone classes - Lower coupling, elimnate all other concepts from the picture
Closure of Operations - where it fits, define an operation whose return typ is the same as the type of its arguments
- this provides a high-level interface without introductin any dependency on other concepts
Conceptual Contours - decompose design elements into cohesive units, taking into consideration your intuation


Chapter 11- Applying Analysis Patterns
Analysis patterns are groups of concepts that represent a common construction in business modelling.
It may be releveant to only one domain or it may span many domains. [Fower 1997, p.8]
-they help feed into the dynamo of knowledge crunching and refactoring toward deeper insight and stimulates development
-when you use a term from a well-known analysis pattern, take care to keep the basic concept it designates intact

Chapter 12 - Relating Design Patterns to the Model
Strategy - decoupling an algorithm via an interface which allows other algorithms to be interchanged
Composite - treating individual objects and compositions of objects uniformly

Chapter 13 - Refactoring Toward Deeper Insight
Focus on:
1. Live in the domain
2. Keep looking at things a different way
3. Maintain an unbroken dialog with domain experts

Part IV - Strategic Design

Chapter 14 - Maintaining Model Integrity
Bounded Context - explicitly define the context within wich a model applies
Continuous Integration - institute a process of merging all code and other implementation artifacts frequently
Context Map - identify each model in play on the project and define its BOUNDED CONTEXT
Shared Kernel - designate some subset of the domain model that the 2 teams agree to share
Customer/Supplier Development Teams - establish a clear customer/supplier relationship between two teams
Conformist - if there is an upstream/downstream relationship, the downstream should conform to the upstream group
Anticorruption Layer - create an isolating layer to provide clients with functionality in terms of their own domain model.
Separate Ways - declare a bounded context to have no connection to others at all(avoid cost of integration)
Open Host Service - define a protocol that gives access to your subsystem as a set of Services
Published Language - use a well-documented shared language that can express the necessary domain infomration as a common medium of communication


Chapter 15 - Distillation
Core Domain - Boil the model down. Put most valuable and specialized concepts into the Core Domain, apply top talent to the Core Domain
Generic Subdomains - identify cohesive subdomains that are not motivation for your project, leave no trace of project specifics there
Domain Vision Statement - write short description of the Core domain ("value proposition"), statement to guide
Highlighted Core - very brief document (3-7 pgs) that describes the core domain
Cohesive Mechanisms - partition a conceptually cohesive mechanism into a separate lightweight framework(use intention revealing interface)
Segregated Core - refactore the model to separate the core concepts from supporting players and strengthen the cohesion of the CORE while reducing its coupling to other code
Abstract Core - Identify the most fundamental concepts in the model and factor them into distinct classes, abstract classes, or interfaces, place in own module


Chapter 16 - Large Scale Structure
Devising a pattern of rules or roles and relationshiops that will span the entire system and that allows some understanding of each part's place in the whole
Evolving Order - the conceptual large-scale structure evovolving with the application, possibly changing to a completely different type of structure along the way, avoid straight-jacketing
System Metaphor - when a concrete analogy to the system emerges that captures the imagination of team members and seems to lead thinking in a useful direction, adopt it as a large-scale structure
Responsibility Layers - look at conceptual dependencies in your model and the varying rates and sources of change of different parts of your domain, if you identify a natural strata in the domain, cast them as broad abstract responsibilities
Knowledge Level - a group of objects that describes how another group of objects should behave, crate a distinct set of objects that can be used to describe and constrain the structure and behavior of the basic model
Pluggable Component Framework - distill an abstract core of interfaces and interactions and create a framework that allows diverse implementations of those interfaces to be freely substituted

Chapter 17 - Bringing the Strategy Together
Six essentials for Strategic Design Decision Making
1. Decisions must reach the entire team
2. The decision process must absorbe feedback
3. The plan must allow for evolution
4. Architecture teams must not siphon off all the best and brightest
5. Strategic design requires minimalism and humility
6. Objects are specialists; developers are generalists



Thursday, November 20, 2008

Dynamic Checkerboard Code

An interesting problem is to draw a dynamic checkerboard or chessboard with the constraints that the height and width of the board are variable along with the fact that the dimension of the individual squares themselves have variable defining their own height and width. The board must be drawn with a simple text output.

The following java solution is proposed


/*
* Create a function that can draw a checkerboard with boardwidth by boardlength where each square is squarewidth by squarelength.
* It is to be drawn with System.out.prints only.
*/
public class DrawCheckerBoard {

public static void drawCheckerBoard(int checkerBoardWidth, int checkerBoardHeight, int squareWidth, int squareHeight)
{
for (int i = 0 ; i < checkerBoardHeight ; i++)
{
for (int j = 0 ; j < squareHeight ; j++)
{
for(int k = 0 ; k < checkerBoardWidth ; k++)
{
//determine character to draw for square
//based on the which checkerboard spot (i and k indices)
String character = "X";
if ((i+k)%2==0)
{
character = "O";
}
for (int l = 0 ; l < squareWidth ; l++)
{
System.out.print(character);
}
}//end of line
System.out.println("");
}
}

}

public static void main(String[] args)
{

System.out.println("4 by 4 board with each square being 2 by 2");
drawCheckerBoard(4,4,2,2);

System.out.println("8 by 8 board with each square being 4 by 4");
drawCheckerBoard(8,8,4,4);

}

}

Monday, September 22, 2008

COBIT Powerpoint Presentation


I researched to find out what COBIT was by reading IT Governance Based on Cobit 4.1: A Management Guide (Paperback)
by Koen Brand and Harry Boonen.

COBIT is an IT Framework for Governance. It has similarities to ITIL and some overlap. One person told me that COBIT is what you build and ITIL is how you do it.

Anyways, I made a brief powerpoint presentation on COBIT which may be viewed from Here

Obviously very high level, but with pictures and some text, it will help.

Tuesday, September 9, 2008

Determining Leap Year in Oracle and Days in February

Recently, I was playing around with a leap year issue and the number of days in February. I would like to share the following snippets of commands to help some people save some time.

--2 ways to determine if it is a LEAP YEAR in ORACLE

SELECT 2008 , Decode( mod(2008, 4), 0, decode( mod(2008, 400), 0, 'Yes', decode( mod(2008, 100), 0, 'No', 'Yes') ), 'No' ) as LEAP_YEAR
FROM DUAL;

or

SELECT DECODE(29, (SELECT to_date('01032008', 'DDMMYYYY') - to_date('01022008', 'DDMMYYYY')FROM DUAL),'LEAPYEAR','NOTLEAPYEAR')
FROM DUAL;

--2 ways to determine the NUMBER OF DAYS IN FEBRUARY in ORACLE

SELECT (EXTRACT (DAY FROM LAST_DAY(ADD_MONTHS(TRUNC(TO_DATE('2008','YYYY'),'YYYY'),1))))
FROM DUAL;

or

SELECT to_date('01032008', 'DDMMYYYY') - to_date('01022008', 'DDMMYYYY')
FROM DUAL;



Of course the input to these queries requires the year that you are inquiring about.

Saturday, August 30, 2008

Powerpoint ITIL Presentation



I have recently done some research into ITIL including the reading of Foundations of IT Service Management Based on ITIL V3 by Jan Van Bon, Arjen de Jong, and Axel Kolthof.

ITIL is a very broad level topic about IT services and how to approach them.

I did make a brief high level powerpoint presentation on an Introduction to ITIL.

This presentation may be downloaded from Here

It is a basic high level presentation, it is difficult to present the topic without getting lost in the depth and breadth. This presentation just presents a little background and a little overview of the lifecycle phases in Version 3.

Wednesday, August 13, 2008

Service Oriented Architecture with Java



I recently read “Service Oriented Architecture with Java” by Binildas CA, Malhar Barai, and Vicenzo Caselli. This book, available at http://www.packtpub.com, provides a look at some of the tools in the java world that can be applied to support a Service Oriented Architecture.

There are 6 Chapters in all:

Chapter 1: The Mantra of SOA
This chapter reviews basic tiered architecture, EA and the basic points of benefit of SOA including better integration, business agility, asset re-use, increase ROI

Chapter 2: Web Services and SOA
Practically all current SOA implementations now are built upon web services. XML over the Http protocol is covered. Representational State Transfer(REST) is covered. Main java implementations of web services are introduced including JAX-WS 2, Axis2, Spring-WS, and XFire/CXF 2.0.

Chapter 3 : Web Service Implementations
Code is presented for getting a web service up and running in JAX-WS2, Axis2, Spring-WS, and XFire/CXF 2.0 The coded examples are very easy to follow and can get a developer up and running quickly.

Chapter 4: Data and Services – All Roads Lead to Enterprise Service Bus
This chapter reviews JDO(Java Data Objects) as an alternative to JDBC along with sample code and examples. Service Data Objects(SDO) are covered as a way to abstract data within and SOA. Apache Tuscany DSO is covered with an example. Service Component Architecture(SCA) is described along with a Tuscany SCA java example
Benefits of MOM and ESB are also covered. OpenESB is covered as an open source option for implementing an ESB.

Chapter 5 – Traditional Integration Technology
2 Case Studies are presented showing the advantages of an SOA based architecture over that of EAI.

Chapter 6 – Goals We Can Achieve with SOA
Loose Coupling, Reusability, Seamless Integration, Return on Investment(ROI)

All in all this is a pretty good book. It’s focus is definitely to provide information on a SOA implementation in a java oriented environment. This book covers the basics of the open source options to getting java based web services and infrastructure. I would strongly recommend this book to those trying to do open source SOA implementations in java.

Wednesday, July 16, 2008

Run .NET Code from a shared drive/directory

Security is an issue whenever running code from an untrusted source like a shared or network drive. It would be nice to be able to put an application on a share drive to run whether it be in C# or VB .NET.

Normally, when you try to run .NET code on a shared network drive you will get an exception like System.Security.Permissions.SecurityPermission .


There is a way to relax the security via the caspol.exe command(For .Net Framework 2.0 "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -s off").

An application may be launched with one simple batch file as follows:

AllInOne.BAT:
@ECHO OFF

REM Relax security constraints for .NET
START C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -s off

REM Pause until first command has executed
Set Count=1
:LOOP
Set /A Count=%Count%+1
If %Count% lss 100 GoTo :LOOP

REM Launch .NET application
"""SomeExecutable.exe"""

REM Remove relaxation of security constraints
TASKKILL /im CasPol.exe

@ECHO ON

*****************************

A pause is required to allow caspol to start up before launching the .NET application.

But of course this implementation does meet the requirements of launching the .NET application from the shared location but there are those DOS windows which are open and probably not that desirable.

These can be avoided with 2 BAT files and 2 VBS files as follows. This is just one way of doing it but there are probably better ways out there.

launch.bat (Main file)
****************
@ECHO OFF
REM Main Launch for .NET application on share drive
REM VBS script used so there is not a DOS console opened up

START launchtasks.vbs

@ECHO ON

****************

launchtasks.vbs
****************
On Error Resume Next

CmdLine = """tasks.bat"""
Params = ""
CmdLine = CmdLine & " " & Params

'Launch without window
wscript.echo fShellRun(CmdLine)

Function fShellRun(sCommandStringToExecute)
' This function will accept a string as a DOS command to execute.
' It will then execute the command in a shell, and capture the output into a file.
' That file is then read in and its contents are returned as the value the function returns.
Dim oShellObject, oFileSystemObject, sShellRndTmpFile
Dim oShellOutputFileToRead, iErr
Set oShellObject = CreateObject("Wscript.Shell")
Set oFileSystemObject = CreateObject("Scripting.FileSystemObject")
sShellRndTmpFile = oShellObject.ExpandEnvironmentStrings("%temp%") & oFileSystemObject.GetTempName
On Error Resume Next
oShellObject.Run sCommandStringToExecute & " > " & sShellRndTmpFile, 0, True
iErr = Err.Number
On Error GoTo 0
If iErr <> 0 Then
fShellRun = ""
Exit Function
End If
fShellRun = oFileSystemObject.OpenTextFile(sShellRndTmpFile,1).ReadAll
oFileSystemObject.DeleteFile sShellRndTmpFile, True
End Function

****************

tasks.bat
****************
@ECHO OFF

REM Relax security constraints for .NET
REM Run this in VBS to avoid a DOS WINDOW
START caspol.vbs

REM Pause until first command has executed
Set Count=1
:LOOP
Set /A Count=%Count%+1
If %Count% lss 70 GoTo :LOOP

REM Launch .NET application
"""SomeExecutable.exe"""

REM Remove relaxation of security constraints (The >NUL is to avoid showing the info on the processes terminated)
TASKKILL /im CasPol.exe >NUL

@ECHO OFF

****************


caspol.vbs
****************
On Error Resume Next

'The command below will also depend on the .NET version of the application you are running

CmdLine = """C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CasPol.exe"""
Params = "-s off"
CmdLine = CmdLine & " " & Params

'New way without window
wscript.echo fShellRun(CmdLine)

Function fShellRun(sCommandStringToExecute)
' This function will accept a string as a DOS command to execute.
' It will then execute the command in a shell, and capture the output into a file.
' That file is then read in and its contents are returned as the value the function returns.
Dim oShellObject, oFileSystemObject, sShellRndTmpFile
Dim oShellOutputFileToRead, iErr
Set oShellObject = CreateObject("Wscript.Shell")
Set oFileSystemObject = CreateObject("Scripting.FileSystemObject")
sShellRndTmpFile = oShellObject.ExpandEnvironmentStrings("%temp%") & oFileSystemObject.GetTempName
On Error Resume Next
oShellObject.Run sCommandStringToExecute & " > " & sShellRndTmpFile, 0, True
iErr = Err.Number
On Error GoTo 0
If iErr <> 0 Then
fShellRun = ""
Exit Function
End If
fShellRun = oFileSystemObject.OpenTextFile(sShellRndTmpFile,1).ReadAll
oFileSystemObject.DeleteFile sShellRndTmpFile, True
End Function

****************

Sunday, June 22, 2008

ITIL Introduction videos

It has been a while since I have blogged here. My goal is to research a little into ITIL (Information Technology Infrastructure Libary)

I read "Foundations of IT Service Management Based on ITIL V3" a few months back and am trying to group some materials on an introduction to ITIL.

Let me say that up front the ITIL processes and lifecycle is very high level and hard to grasp at an implementation detail. I guess the key is to focus on a small portion of it and grow it out from there.

I found a couple youtube links that I think are easy to listen to.

Synopsis of the ITIL(r) V3 Foundations class:



EMC on ITIL:

Monday, May 12, 2008

EA and Integration Summit

I got back from the first day of the Enterprise Architecture and Integration Summit in Calgary May 12-14th. There were lots of interesting topics, considering of course if Enterprise Architecture, Service Oriented Architecture, ITIL, TOGAF and other methodologies interest you!

I recently finished my Master's Thesis which involved SOA, Zachman and TOGAF and how they can work together. The conference was much more entertaining. The first keynote was John Zachman and he revealed the new Zachman Framework 2 and handed out the new 6 x 6 matrix diagram. Check out http://zachmaninternational.com/2/standards.asp for info on the new framework. It is very similar but they went to work with some linguists to make sure there are "no adjectives" in the matrix. They wanted it to be more rigorous and easier to understand(clearer and "brushed up").

After John Zachman spoke, I had a chat with him and thanked him for his work on the framework. I was able to pose in a picture with him. He seems to be very friendly and no nonsense. Most of his talk was the view of "Architecture is Architecture is Architecture", the instance of the system is not architecture itself.

The funniest moment was when he displayed the IT problems they faced in 1965 and compared them to 2008. They were identical! Also, he showed a slide that showed all of the technologies that did not solve the problems: COBOL, Fortran, mainframe, client server,......, agile programming, web services, .NET, SOA. Technology does not solve these issues. Architecture is important.

Other talks I found interesting were Stan Locke talking about the new Zachman Framework, Bill Dupley spoke of HP's harnessing of ITIL for better management. It was pretty interesting and looking forward to tomorrow's session as well.

Sunday, March 16, 2008

Enterprise Architecture Framework Applications towards SOA

I am in the final stages of completing my Thesis requirement for my MSc. in Information Systems at Athabasca University.

I am working through the final signoff but the latest version may be downloaded Enterprise Architecture Framework Applications Towards Service Oriented Architecture

ABSTRACT
A large challenge facing today’s enterprises is the integration of their own disparate systems to be more competitive and react more strategically to market opportunities. Service Oriented Architecture(SOA) is a style of architecture where the use of reusable and discoverable services are used as components to meet business requirements. The promise of SOA is that the use of these services will allow the organization to increase business agility and reuse of software components. There are some challenges to implementing a SOA. One of the challenges is to present view from the enterprise perspective. Typically, projects take only a view of individual business unit without concerns for the entire organization. Enterprise Architecture(EA) describes the current business and IT processes and how they map together. The two most popular EA Frameworks, Zachman Framework and The Open Group Architecture Framework(TOGAF), are designed to help the organization clarify the current IT Architecture and help provide a roadmap to the goal or future IT architecture. It is with the enterprise view that these frameworks provide that SOA can be supported towards a more successful implementation. There is work underway to determine the relationship between SOA and EA. Whether by clarification from industry experts or direct modifications of the EA Frameworks, EA Frameworks are being used to help implement SOA. It is through the enterprise view and architectural tools provided by the EA Frameworks that SOA can be supported.

Sunday, March 9, 2008

Getting 2 .NET applications to use different Oracle Clients

It is not necessarily evident how to get 2 .NET applications to use 2 different Oracle clients on the same server. The following are some rough notes, but you should get the idea and hopefully save you some time as well.

Information can be found at
http://www.oracle.com/technology/tech/windows/odpnet/faq.html

But I will document what I found.

1. Getting the .NET applications to use the appropriate clients on my development machine

I had to follow some steps to get the different .NET applications to use the appropriate Oracle client.

http://www.oracle.com/technology/tech/windows/odpnet/faq.html

Building a website with Oracle 92:
1. Close Visual Studio
2. Uninstall all Oracle Dlls to remove any 102 references
3. Install only the 9.2 Oracle dlls to the GAC:
4. Set Path with "C:\oracle\ora92\bin;" at the start of the Path environment variable
5. Start Visual Studio and Add Reference the first OracleDataAccess dll (despite what the version # says) to the project
6. Set the dll Copy Local to true for some reason then it compiles
7. Run the app and verify that the right dll is being used
Building a website with Oracle 102:
1. Close Visual Studio
2. Ensure that the 102 Oracle Dlls are in the GAC:
3. Set Path with "C:\oraclexe\app\oracle\product\10.2.0\server\BIN\;" at the start of the Path environment variable
4. Start Visual Studio and Add Reference the first OracleDataAccess dll (despite what the version # says) to the project
5. Run the app and verify that the right dll is being used



uninstall All Oracle GAC dlls
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u Oracle.DataAccess
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u Policy.9.2.Oracle.DataAccess
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u Policy.10.1.Oracle.DataAccess



10.2.0.1 GAC install
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i C:\oraclexe\app\oracle\product\10.2.0\server\BIN\Oracle.DataAccess.dll
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i C:\oraclexe\app\oracle\product\10.2.0\server\ODP.NET\PublisherPolicy\Policy.10.1.Oracle.DataAccess.dll


9.2 GAC install only
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /i C:\oracle\ora92\bin\Oracle.DataAccess.dll

Your application can do a simple ""select count(*) on table" to verify functionality. To find out which dll you are exactly using, you can use
Type ttt = typeof(OracleConnection);
mes += "\n ttt.Assembly.FullName";



2. Note that setting the path variables for Windows Server does not help out the same as on XP

The path can be set in the application via setting the DLL path in the application itself as follows:

Inside Global.asax.cs:

[DllImport("kernel32.dll",SetLastError=true)]
static extern bool SetDllDirectory(string lpPathName);
protected void Application_Start(Object sender, EventArgs e)
{
string dllPath = ConfigurationSettings.AppSettings["DllPath"];
bool result = SetDllDirectory(dllPath);
}


Inside Web.config

<appsettings>
<add key="DllPath" value="D:\oracle\Client_10g_1010\BIN">
</add>
</appsettings>

Friday, March 7, 2008

Scheduling a Task to run on a remote server

If you want to set up a scheduled task to execute remote code on another box you can do the following.

Assuming the you have a job server and code server where the executable lives.



Step 1: Create job.bat and job.vbs on the job server
Step 2: Create Scheduled Task to execute job.bat on a regular basis

For more on Scheduling Tasks you can try
http://www.iopus.com/guides/winscheduler.htm or http://www.google.com for more details

The files job.bat and job.vbs will reside on the job server and execute code living on the code server.


On the job server:

You will have a job.bat file to reference the job.vbs file:
"C:\Jobs\job.vbs"


Which will call a job.vbs file:

On Error Resume Next

Dim strComputer
Dim strCommand
Dim strUsername
Dim strPassword

'Configuration of Remote Server Location and credentials
strComputer = "computername"
strUsername = "username"
strPassword = "password"

'Task to execute on remote server
strCommand = """C:\Code\program.exe"""

'Script to execute remote command
ExecuteCommand strComputer,strCommand, strUsername, strPassword

Sub ExecuteCommand(strComputer,strCommand, strUsername, strPassword)

'wscript.echo("Executing " & strCommand & " on " & strComputer)

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSwbemServices = objSWbemLocator.ConnectServer(strComputer,"root\cimv2", strUsername , strPassword)
Set objSWbemObject = objSWbemServices.Get("win32_Process")

errReturn = objSWbemObject.Create(strCommand,null,null,intProcessID)

'if errReturn = 0 then
' Wscript.Echo strCommand & " was started with a process ID of " & intProcessID & "."
'else
' Wscript.Echo strCommand & " could not be started due to error " & errReturn & "."
'end if

End Sub

Wednesday, February 20, 2008

SOA Approach to Integration



I was recently sent a copy of "SOA Approach to Integration" by Matjaz B. Juric, Ramesh Loganathan, Poornachandra Sarang, and Frank Jennings to review from the good people at http://packtpub.com.

It is a good overview of SOA concepts combined with Integration viewpoint. Integration is handled within SOA. SOA is about integration. Process Oriented Architecture was a term that was introduced. POA is about using BPEL to manage business processes with existing services.

All in all, a good review of SOA issues including ESB, WS specifications, XML considerations.


There are 6 chapters:


1.Integration Architecture, Principles and Patterns

Review of different integration technlologies and types of integration
overview of integration challenges, process is important
SOA and its associated technolgies is a valid approach to integration


2.Service and Process Oriented Architectures


POA is centered on the processes that "use" the services while SOA is about"providing" the services.
POA is the approach from the business side of things. It is about business process and main standards include BPEL, WSCI, etc.


3.Best Practices for Using XML for Integration

Review of XML with tops and issues to watch out for.

4.SOA and Web Services Approach for Integration

SOA is not web services but web services are the specification/technology of choice in the arena.
WS applies to both EAI and B2B as well as SOA.
Included some on the specification process.

5.BPEL and Process-Oriented Approach

Familiarization with BPEL and POA together.
With a sample application of BPEL towards a Billing Process

6.Service and Process Oriented Approach to Integration using Web Services

Putting it all together with the Enterprise Service Bus(ESB).
Discussion of the ESB and what it offers for Integration and SOA.

Sunday, February 17, 2008

Intro to SOA - InfoClipz

A great video on SOA, no fluff or buzzwords!

Wednesday, January 2, 2008

Ram Charan's "What The Customer Wants You To Know"



Ram Charan's publisher sent me a copy of his latest book "What The Customer Wants You To Know" which breaks down how to look at Sales and business development. The process illustrated is Value Creation Selling(VCS).

This process where the salespeople lead a multidisciplined team to gather a deeper look at where value can be added for the customer. Whereas the older views of sales competions are trying to beat one another on price alone. This attempts to provide a better picture of customer's needs and how to generate business.

There are 8 Chapters:

1. The Problem of Sales
Today is more competitive and a new way of finding opportunities is required.

2. Fixing the Broken Sales Process
Sales alone cannot do VCS it will require changes with Sales leading the efforts to collaborate with the customer on many levels within the client side and the vendor side.

3. How to Become Your Customer's Trusted Partner
Information is the heart of VCS. Study the customer and the customer's competitors. Know how decisions are made in the customer's organization.

4. The Value Account Plan
The VAP is a template completed by the salesperson to define the value propostion and business benefits the customer can expect to get from it. "A company that is selling value-creating solutions uses value pricing, which is different". Salespeople may have a psychological blockage about premium pricing. They are used to customers driving hard on price--and losing deals because of it" With value pricing, the price can be determined at some point where both the client and vendor benefit.


5. Developing the Value Creation Sales Force
This will require great changes to the Sales force. The salesperson will require affability, conceptualizing problems and solutions, leadership, tenacity and business acumen. Training, communicating successes and measuring progress will be required to ensure that VCS takes successfully.

6. Making the Sale
Once the VAP is made it must be presented carefully to the client. Again, both technical and operational members will be required to provide the appropriate vision to the client.

7. Sustaining the Process
Drive the process with reviews and link compensation to success with VCS.

8. Taking Value Creation Selling to the Next Level
Keep on working with VCS, it is a difficult journey but those who make it will be amply rewarded.


Charan has provided a new look at sales than the old sales funnel approach which is multifaceted which seems to make sense to ferret out newer opportunities in today's highly competitive and complex market. A disciplined and detailed approach should provide the vendor with better ways to serve the client's needs.