DevDays 2011

DevDays 2011

 

image

This year 14th edition of Dutch DevDays will be organized. I have been attending these conference since I started in IT business since 2000. Thousands of professionals will gather this year again for two days to become fully informed of all current developments in their field. Azure, cloud, desktop / client, SQL Server, Visual Studio,. Net, Windows 7 Phone, Web, SharePoint and user experience are the major themes of this year. As BizTalk MVP you can find me in community lounge as representative of BizTalk community.

devdays_lounge

Interview Series: Four Questions With  Jon Fancey

Interview Series: Four Questions With Jon Fancey

Welcome to the 29th interview in my never-ending series of chats with thought leaders in the “connected systems” space. This month, I snagged the legendary Jon Fancey who is an instructor for Pluralsight, co-founder of UK-based consulting shop Affinus, Microsoft MVP, and a well-regarded speaker and author. On to the questions! Q: During the recent […]
Blog Post by: Richard Seroter

…and the JavaScript winner is….

We all love benchmarks!With the recent release of new versions of some of major browsers, and as a small diversion over the weekend, I ran five well-known browsers against five well-known JavaScript micro-benchmarking suites using my laptop.The results are reproduced below.I have ranked the results for each benchmark suite from best to worst.
Celtic Kane – old version (current version was unavailable)
(Smaller is better)
Opera 11 77 ms
Safari 5 93 ms
Chrome 10 119 ms
IE 9 152 ms
FF 4 154 ms
Kraken 1.0 (Mozilla)
(Smaller is better)
FF 4 7,555.6 ms
Chrome 10 8,439.8 ms
Opera 11 12,918.8 ms
IE 9 16,551.9 ms
Safari 5 19,099.8 ms
Dromaeo (Mozilla) (all JavaScript tests)
(Bigger is better)
Chrome 10 457.53 runs/s
IE 9 403.96 runs/s
FF 4 386.74 runs/s
Opera 11 369.49 runs/s
Safari 5 257.42 runs/s
V8 v6 (Google)
(Bigger is better)
Chrome 10 7,737
FF 4 3,111
Opera 11 3,050
Safari 5 2,319
IE 9 2,119
SunSpider 0.9.1 (WebKit)
(Smaller is better)
IE 9 249.8 ms
Opera 11 289.9 ms
FF 4 295.2 ms
Chrome 10 309.0 ms
Safari 5 353.9 ms
So, what does this prove?Absolutely nothing!It’s impossible to pick an overall winner from these results, or even to determine any particular trend. I’ll provide two observations, however.First, comparative micro-benchmarking remains as problematic as ever.Pick your preferred test to ‘prove’ whatever you wish. Second, competition between browsers remains fierce. As a result, JavaScript performance has improved massively across the board in the last couple of years. That’s great news. It means we are all winners!

Replacing string within Regular Expressions Match

I have a trading partner who sends in invalid characters within a REF03 in an X12 850. In the following example, my element separator is *, and the customer is sending in a * within the REF03. I’m wanting to remove that invalid character before it hits the EDI pipeline component.

Example X12 850:

DTM*010*20110329~
PO1*10547090*1*EA*67.5**BP*PG7058SP—-~
PID*F****LDY FAITH INDIVIDUAL IRON~
REF*TC**HEREISMYINVALIDCHARACTER*~

I first captured all the TC Qualified Ref Segments into named groups (pre, text, and post) with the following Regular Expression.

@”(?<pre>REF\*TC\*\*)(?<text>.*?)(?<post>~)”

Using a method I am able to capture all the REF*TC segments, evaluate each one, and within each “text” group replace the errant * with “ “. Note the use of the MatchEvaluator delegate within the Replace method.

private string myGoodString(string strBadString, string strSegmentTerminator)
{
string strRegex = @”(?<pre>REF\*TC\*\*)(?<text>.*?)(?<post>”+strSegmentTerminator+”)”;
RegexOptions myRegexOptions = RegexOptions.None;
Regex myRegex = new Regex(strRegex, myRegexOptions);

string result = myRegex.Replace(strBadString, delegate(Match m)
{
return String.Join(String.Empty, new String[]{
m.Groups[“pre”].Value,
m.Groups[“text”].Value.Replace(“*”,” “),
m.Groups[“post”].Value
});

});
return result;
}

Here is the resulting X12 850 snippet.

DTM*010*20110329~
PO1*10547090*1*EA*67.5**BP*PG7058SP—-~
PID*F****LDY FAITH INDIVIDUAL IRON~
REF*TC**HEREISMYINVALIDCHARACTER~

Blog Post by: Eric Stott

Don’t hire bad developers – period.

There has been quite a furore in the last couple of weeks about a blog article published by David Barrett entitled “CEO Friday: Why we don’t hire .NET programmers”.You can find it at http://blog.expensify.com/2011/03/25/ceo-friday-why-we-dont-hire-net-programmers/.Along with about half the global development community, I tried to post a response, but comments were already closed.I had all but forgotten the article until, a few minutes ago, up popped a daily .NET newsletter with a headline linking to the article.
I can’t help thinking this is just one step removed from a long line of ‘.NET developers are dumb’ articles.I’ve read a few of these over the years.The last one I remember (I can’t recall the URL, unfortunately) was classic. The guy writing the article explained that he had recently interviewed half a dozen developers for a job.All but one were Java developers, and he was generally impressed by their understanding of design patterns and the like – even a candidate fresh from college.One, however, was a .NET developer (I wonder if the interviewee had misread the job description) and he was apparently very ignorant.On the basis of this deeply representative sample, the author concluded that the whole .NET development community (several million people) are equally useless and ignorant!I kid you not!
Maybe I’m being unfair to David Barrett.However, while posting a comment to his blog site would have made me feel better, it wouldn’t have achieved anything.Reading through the comments, I’m struck how many posts quickly degenerate into mud-slinging.David is accused of several things which are not worth repeating.In turn, others rise to ‘defend’ his position by throwing vitriol and invective at the whole tribe of .NET developers.
For my part, and simply as a self-indulgent exercise, I will note that I do not recognise David’s characterisation of .NET development.It seems to me that he fails to explain properly what aspects of .NET tools and technologies he is talking about. In a subsequent update, he explained his original claim that .NET is a ‘language’ was a poor ‘word choice’.Fair enough.However, it seems to me that he describes .NET all the way through his post as if it is some kind of 4GL.It patently isn’t!More to the point, neither are the mainstream .NET languages.Maybe he has in mind Microsoft’s old love of 1990’s-style form development, as originally used in .NET not only for desktop app development but also ‘classic’ ASP.NET.If this is the case, he is seriously out of date.Professional ASP.NET development has long-since moved foursquare into the MVC / RESTful world.Desktop development (now a minority sport in this web-enabled, mobile age) has largely moved on to XAML-based development.Maybe that’s the issue.XAML can be considered to be just one of many forms of model-driven development Maybe he is railing against MDD.If so, I can’t imagine why he has singled out .NET.If anything, .NET has been playing a degree of catch-up with the Java world on that score. So, I remain confused by his arguments (no doubt some will claim I’m just too dumb), but confident from my own experience that he is deeply mischaracterising the .NET platform and the community of .NET developers.
Well, I’ve got that off my chest.A wider issue, though, arises from reading some of those comments.Why, after all these years, are we developers are so ready to sling mud at others.We fall hook, line and sinker for simplistic, ill-informed characterisations of whole swathes of our industry in an attempt to convince ourselves that we are the clever chosen elect and those others over there are just plain stupid and damned to all eternity.It’s so childish.It’s so false.In summary, my take on David’s article, which I consider a tad more balanced, is this.Don’t hire bad .NET developers.Don’t hire bad Java developers.Don’t hire bad Ruby or C++ or Python, or Perl developers.There’s no need.There are plenty of good developers out there. This is a great industry.

Part 3: BizTalk High Availability Server Environment – SQL & BizTalk Active Directory Accounts

Part 3: BizTalk High Availability Server Environment – SQL & BizTalk Active Directory Accounts

In our previous part we’ve installed our Domain Controller and not to say the least one of the most vital servers within our to set up Server Environment.

This post will mainly focus on setting up the Active Directory Accounts which will be used throughout the other upcoming parts.

So let’s get started.

Planning security groups, user accounts and service accounts

Like every installation and configuration it is essential to have an overview of the things you would like to accomplish before implementing them, well the same rules apply here; therefore below an overview of the required Security groups, user accounts and service accounts.

Security Groups

    • BizTalk Application Users
  • BizTalk Isolated Host Users
  • BizTalk Server Administrators
  • BizTalk Server B2B Operators
  • BizTalk Server Operators
  • BizTalk Bam Portal Users
  • SSO Administrators
  • SSO Affiliate Administrators
  • IIS_IUSRS

Service Accounts

  • srvc-bts-trusted
    [Service account used to run BizTalk Isolated host instance (HTTP/SOAP)]
  • srvc-bts-untrusted
    [Service account used to run BizTalk In-Process host instance which access In-Process BizTalk host instance (BTNTSVC)]
  • srvc-bts-sso
    [Service account used to run Enterprise Single Sign-On Service which accesses the SSO database]
  • srvc-bts-rule-engine
    [Service account used to run Rule Engine Update Service which receives notifications to deployment/undeployment policies from the Rule engine database]
  • srvc-bts-bam-ns
    [Service account used to run BAM Notification Services which accesses the BAM databases]
  • srvc-bts-bam-ap
    [Application pool account for BAMAppPool which hosts BAM Portal Web site]
  • srvc-sql-agent
  • srvc-sql-engine
  • srvc-sql-analysis
  • srvc-sql-reporting
  • srvc-sql-integration

User Accounts

  • usr-bts-install
  • usr-bts-bam
  • usr-bts-admin
  • usr-bts-operator
  • usr-bts-b2b-operator
  • usr-bts-sso-admin
  • usr-bts-sso-affiliate

Accounts – Security Group mapping

BizTalk Application Users

Contains service accounts for the BizTalk In-Process host instance in the host that the BizTalk Host Group is designated for.

Accounts
  • srvc-bts-untrusted

BizTalk Isolated Host Users

Contains service accounts for the BizTalk Isolated host instance in the host that the Isolated BizTalk Host Group is designated for.

Accounts
  • srvc-bts-trusted

BizTalk Server Administrators

Contains users/groups that need to be able to configure and administer BizTalk Server.

Accounts
  • Domain Admin
  • usr-bts-admin

BizTalk Server B2B Operators

Contains user/groups that will perform all party management operations

Accounts
  • Domain Admin
  • usr-bts-b2b-operator

BizTalk Server Operators

Contains user/groups that will monitor solutions.

Accounts
  • Domain Admin
  • usr-bts-operator

BizTalk Bam Portal Users

Everyone group is used for this role by default.

Accounts
  • Domain Users

SSO Administrators

Contains service accounts for Enterprise Single Sign-On service.

Contains users/groups that need to be able to configure and administer BizTalk Server and SSO service.

Contains accounts used to run BizTalk Configuration Manager when configuring SSO master secret server.

Accounts
  • Domain Admin
  • srvc-bts-sso
  • usr-bts-sso-admin

SSO Affiliate Administrators

Contains account used for BizTalk Server Administrators

Accounts
  • Domain Admin
  • usr-bts-sso-affiliate

IIS_IUSRS

This built-in group has access to all the necessary file and system resources so that an account, when added to this group, can seamlessly act as an application pool identity.

Accounts
  • srvc-bts-trusted
  • srvc-bts-bam
  • srvc-bts-bam-ap

Adding security groups, user accounts and service accounts

Now that we have a clear overview of all the required security groups, user and service accounts it´s time to actually add them to our Active Directory.

Fire up your Domain Controller Server, and in your Server Manager open up “Roles” –> “Active Directory Users and Computers” and click on your domain

Setting up BizTalk Organizational Unit

Add a new Organizational Unit and name called “BizTalk”, do this by “right clicking” on your domain –> “New” –> “Organizational Unit”

Enter the name of the new ‘Organizational Unit Object”, ensure to check “Protect container from accidental deletion” and press “OK”

Select the just created “Organizational Unit BizTalk” and a new group, do this by “right clicking” your “BizTalk Organizational Unit” –> “New” –> Group

Enter the name of the group, ensure the “Group Scope” is “Global” and the “Group Type” is “Security”. Once done press “OK”

Now add the following Security Groups, by repeating the 2 previous mentioned steps:

  • BizTalk Isolated Host Users
  • BizTalk Server Administrators
  • BizTalk Server B2B Operators
  • BizTalk Server Operators
  • BizTalk Bam Portal Users
  • SSO Administrators
  • SSO Affiliate Administrators

You should end up with the following groups within your “BizTalk Organizational Unit”

Now select the just created “Organizational Unit BizTalk” and two new “Organizational Units” named:

  • Service Accounts
  • User Accounts

Do this by “right clicking” your “BizTalk Organizational Unit” –> “New” –> “Group” and filling out the required details (ensure to check “Protect container from accidental deletion”). You should end up with the following 2 new “Organization Units” within the “BizTalk” Organizational Unit”

Now select the just created “Organizational Unit Service Accounts” and add the following “Users”

  • srvc-bts-trusted
  • srvc-bts-untrusted
  • srvc-bts-sso
  • srvc-bts-rule-engine
  • srvc-bts-bam
  • srvc-bts-bam-ns
  • srvc-bts-bam-ap

[Repeat the following steps for each new “User” mentioned above]
Do this by “right clicking” your “Service Accounts Organizational Unit” –> “New” –> “User”

Fill out the “First Name”, “Full Name”, “User logon name” and press “next”

Assign a “Password”, ensure to uncheck “User must change password at next logon” and ensure to check “User cannot change password” and check “Password never expires”. Once done select “Next” and “Finish”

Eventually you should end up with the following users within your “Service Accounts Organizational Unit”

Now select the “Organizational Unit User Accounts” and add the following “Users”

  • usr-bts-install
  • usr-bts-admin
  • usr-bts-operator
  • usr-bts-b2b-operator
  • usr-bts-sso-admin
  • usr-bts-sso-affiliate

[Repeat the following steps for each new “User” mentioned above]
Do this by “right clicking” your “User Accounts Organizational Unit” –> “New” –> “User”

Fill out the “First Name”, “Full Name”, “User logon name” and press “next”

Assign a “Password”, ensure to uncheck “User must change password at next logon” and ensure to check “User cannot change password” and check “Password never expires”. Once done select “Next” and “Finish”

Eventually you should end up with the following users within your “User Accounts Organizational Unit”

Setting up Sql Server Organizational Unit

Now it’s time to set up the SQL Server Organizational Unit; this will be done exactly the same way as mentioned in “Setting up BizTalk Server Organizational Unit”. Below I will summarize what to create.

Add new organizational unit “Sql Server”

Within the “SQL Server” organizational unit add new organizational unit named “Service Accounts”

Add the following user accounts to the Organizational unit “Service Accounts”

  • srvc-sql-agent
  • srvc-sql-engine
  • srvc-sql-analysis
  • srvc-sql-reporting
  • srvc-sql-integration

Adding users to designated security groups

Well we are almost there. Next thing on our list is to assign the created users to the correct Security group. For this you will need to open your previously created “BizTalk Organizational Unit”.

Further instructions on how to achieve this, are listed below; sorted by Security Group

Group: BizTalk Application Users

Right click on the “Biztalk Application Users group” and select properties, select the “members tab” and then press “Add…”

Now select “Advanced…”

Ensure that your location is set to your domain, and in the “Common Queries” section add the value “srvc-bts” in the “Name starts with” textbox and select “Find Now”

Select the following account “srvc-bts-untrusted” and press “OK”

Select “OK”

Select “OK”

Group: BizTalk Isolated Host Users

Repeat the steps as mentioned in “Group: BizTalk Application Users”, but this time you will select the “srvc-bts-trusted” account.

Group: BizTalk Server Administrators

Repeat the steps as mentioned in “Group: BizTalk Application Users”, but this time you will select the following accounts (note; leave the common Queries Filter blank, this way you will see all accounts)

  • “Domain Admins” group
  • usr-bts-admin “user account”

Group: BizTalk Server B2B Operators

Repeat the steps as mentioned in “Group: BizTalk Application Users”, but this time you will select the following accounts (note; leave the common Queries Filter blank, this way you will see all accounts)

  • “Domain Admins” group
  • usr-bts-b2b-operator “user account”

Group: BizTalk Server Operators

Repeat the steps as mentioned in “Group: BizTalk Application Users”, but this time you will select the following accounts (note; leave the common Queries Filter blank, this way you will see all accounts)

  • “Domain Admins” group
  • usr-bts-operator “user account”

Group: BizTalk Bam Portal Users

Repeat the steps as mentioned in “Group: BizTalk Application Users”, but this time you will select the following accounts (note; leave the common Queries Filter blank, this way you will see all accounts)

  • “Domain Users” group

Group: SSO Administrators

Repeat the steps as mentioned in “Group: BizTalk Application Users”, but this time you will select the following accounts (note; leave the common Queries Filter blank, this way you will see all accounts)

  • “Domain Admins” group
  • srvc-bts-sso  “service account”
  • usr-bts-sso-admin “user account”

Group: SSO Affiliate Administrators

Repeat the steps as mentioned in “Group: BizTalk Application Users”, but this time you will select the following accounts (note; leave the common Queries Filter blank, this way you will see all accounts)

  • “Domain Admins” group
  • usr-bts-sso-affiliate “user account”

Group: IIS_IUSRS

Open op the “Builtin Organizational Unit” and double click on the “IIS_IUSRS” group

Select the “Members” tab and press “Add…”

Add following accounts (note; leave the common Queries Filter blank, this way you will see all accounts)

  • “Domain Admins” group
  • “BizTalk Isolated Host Users” group
  • srvc-bts-bam “service account”
  • srvc-bts-bam-ap “service account”

Closing Note

This sums up part 3 SQL & BizTalk Active Directory Accounts, in part 4 we will make the necessary preparations for the SQL en BizTalk failover Cluster set ups, which will include:

  • Installing the required Roles and Features
  • Setting up the File Server and assigning storage to the SQL & BizTalk Clusters.

Until next time

Cheers

René

Using the BizTalk Adapter Pack and AppFabric Connect in a Workflow Service

Using the BizTalk Adapter Pack and AppFabric Connect in a Workflow Service

I was recently in New Zealand speaking to a couple user groups and I presented a “data enrichment” pattern that leveraged Microsoft’s Workflow Services. This Workflow used the BizTalk Adapter Pack to get data out of SQL Server and then used the BizTalk Mapper to produce an enriched output message. In this blog post, I’ll […]
Blog Post by: Richard Seroter