Who is looking at your mobile device right now?

Korby Parnell tells of an unfortunate story about Rob Caron losing his Pocket PC in the Houston airport and then trying to have his carrier disable it since he has “everything on it”. They also lost their luggage enroute to TechEd in Orlando. How ironic it was then that Rob probably slept through Monday's keynote where Microsoft announced the Messaging & Security Feature Pack for Windows Mobile 5.0 and Exchange Server 2003 SP2. This dramatization shows how failed login attempts can be use to wipe the device, or even remotely wipe the device on demand.

DevTeach Conference in Montreal

I'm going to be heading out in a couple of weeks to DevTeach in Montreal. In addition to my regular session talk on Datasets, I'll also be participating in an architecture panel discussion as part of Groupe d’usagers Visual Studio Montréal, Software Architecture Special Interest Group's Special Software Architecture Meeting. The meeting is open to conference attendees, members of the user group, and anybody else for $5. Here's the details....

Speaker: Joel Semeniuk, Microsoft Regional Director, Winnipeg

Subject: Software architecture from the trenches


Architecture is the soul of our software. Software Architecture truly helps to define our success since if our architecture fails us, our software fails us. However, what makes a good architecture? What truly drives architectural decisions? Is one architecture better than another? In this session we will explore and discuss some of these questions while taking a close look at a few real-world examples. In each real-world scenario we will explore the resulting architecture and review the constraints the project faced both during design and during production and maintenance phases. We will also look retrospectively at each architecture presented and discuss ways that it could be improved upon with Microsoft .NET 2.0.


Joel Semeniuk is a founder and VP of Software Development at ImagiNET Resources Corp, a Manitoba based Microsoft Gold Partner in Ecommerce and Enterprise Systems. Joel is also the Microsoft Regional Director for Winnipeg, Manitoba. With a degree in Computer Science from the University of Manitoba, Joel has spent the last twelve years providing educational, development and infrastructure consulting services to clients throughout North America. Joel is the author of "Exchange and Outlook: Constructing Collaborative Solutions", from New Riders Publishing and contributing author of "Microsoft Visual Basic.NET 2003 KickStart" from SAMS. Joel has also acted as a technical reviewer on many other books and regularly writes articles for .NET Magazine and Exchange and Outlook Magazine on a variety of infrastructure and development related topics. Reach Joel by email at joels@imaginets.com.


Followed by a software architecture expert panel:

Beth Massi, Software Architecture MVP

Joel Semeniuk, Software Architecture MVP, Microsoft Regional Director Winnipeg

Barry Gervin, Software Architecture MVP, Microsoft Regional Director Toronto

Mario Cardinal, Software Architecture MVP

Carol Roy, Microsoft Canada .NET architecture specialist for the public sector


Well known Nick Landry (MVP .NET Compact Framework) will act as the moderator.


Come hear these experts talk about software architecture hot topics.  You'll also have the chance to ask questions and talk to the panelists.


Monday June 20th, 5:30PM to 9:30PM

Location: Sheraton Centre, 1201 Boulevard Rene-Levesque West

Cost: free for all the DevTeach attendees and the Groupe d’usagers Visual Studio Montréal members.  $5 for non members or non DevTeach attendees.

Note: this session will be held in English

More info: www.guvsm.net or http://www.devteach.com/BonusSession.asp


SQL Server/Visual Studio/Biztalk Developer Competition - $50K 1st prize

The stakes are getting seriously high on these competitions. How about $50,000 USD?


There are lots of prizes - not just the grand prize. There are many categories to develop in so I think there is something here for every microsoft developer, from SQL Reporting Services, to SQL CLR, to video gaming.

I'd love to see a fellow Canadian win this.

When is a database oriented as a service?

Do you consider your database as a service? It's worthwhile to review the tenents of a service oriented architecture. The first two tenents above are probably the most relevant to my question.

If you do all of your data access through stored procedures, then you might say your database boundary is explicit.

If your database doesn't depend on other services or applications to exist properly, then you could say that your database is autonomous. That's a little tricky. Although we may use stored procedures to access functionality in our database, we may have well known  practices that we have to call the ap_decrease_inventory  proc after we call the ap_ship_order proc to make sure our that our database values are all in check. I wouldn't call our database autonomous if it has to rely on these external rules being inforced.

I'm going to avoid the discussion of the last two tenents because I think the are a bit to pure for my question. I'm really just trying to differentiate between two types of databases that I see out there. For my purposes, I refer to these as Databases as Services, and Databases as File Systems.

Databases as Services typically are well encapsulated and contain business rules. These databases might be supporting several client applications. You probably take great care in these databases, designing them carefully, perhaps with modeling tools, and encapsulating the persistence function with stored procedures, functions, triggers, etc. You may or may not have a well defined data access layer in your client applications. You might consider all the stored procs to be your data access layer, so you might call you procs directly from UI and/or business layers of your application, but that really depends on how well your client application is written. From you database, you don't really care so much since it's well protected service that operates autonomously.

Databases as File Systems are much less strategic. They serve one purpose only - to save stuff from your application. You probably/hopefully have a well defined data access layer in your application. That may even be an Object Relational Mapping tool (ORM). You probably designed the database to support the persistence of the objects in your application, and to generalize, you probably only have one application using this database. The most important thing though is that all of your business rules should be in your application(s). This type of database doesn't mean you don't have db side logic such as stored procedures or triggers. You may decide for optimization reasons that some code needs to live closer to the tables and that's okay. It's okay, so long as you realize it's harder to reuse some of that logic in higher layers of your application and you are comfortable in having your logic live in multiple platforms.

Stored Procedures are increasingly being used to add encapsulation to our database. No longer is performance the rationale for stored procedures. And increasingly, we are seeing advanced services in our databases - 4GL code such as Java and .NET managed code are making their ways into our databases. User Defined Types, Objects, and with the next version of SQL Server, we're seeing a full fledged message queue mechanism with Service Broker. You can even host web services directly in SQL Server 2005.

Is your database a service? Which camp do you fall into? Unfortunately, I think many people live somewhere in between, and that isn't by design. Most of the architectural decisions here should be motivated by where you decide to draw your boundary for strategic reasons, not for what is handy at the moment. I'd like to see people more consciously make this decision and remain committed to it. What are your thoughts?

15% off of MCSD/MCAD Certification Exams @ Pearson/VUE

Use the following voucher number MSAU113E1020. Good until August 31, 2005.

Congratulations to TVBUG


Congratulations to all those involved, but especially to the winning team from TVBUG. So how do we get our hands on that pocketbuilder app?

Update: Links to pocketbuilder added

List of URLs

Code: ftp://cynot.gotdns.com/PocketBuilder in Code directory.

Installation instructions in file setup pocketbuilder.txt.

Zip version of nant and nantcontrib included.

Documentation: ftp://cynot.gotdns.com/PocketBuilder in Documentation directory.

Data Model: http://cynot.gotdns.com/PocketBuilder.DataModel

Blog: http://cynot.gotdns.com

Monitoring ASP.NET tool: http://cynot.gotdns.com/PocketBuilderUI

Admin tool: http://cynot.gotdns.com/PocketBuilderAdmin

WebService: http://cynot.gotdns.com/PocketBuilderWS/PocketBuilder.asmx

Note: The asp.net applications require a username/password. If you are interested in running them send an email to TonyCavaliere@rogers.com

BizTalk 2004 -> Enterprise Integration Patterns and BizTalk

Why use Patterns ?

1) They help in the design of an Integration Project.
Just like any other type of project, you need a good design in order to successfully develop and implement your solution.
For example:
If you are part of a team building a new ASP.NET application, most likely there will be some design and architecture development for a framework that will support the new ASP.NET application. The same can be said for an integration project, but on a different level.

Individual patterns can be described by one (Shape) as below.

With an integration project, the goal is to chain the patterns together as below:

The above diagrams were created in Visio. The Visio template that was used to create the above diagrams
can be downloaded HERE.

The above diagram is NOT a BizTalk specific solution, but really is an Integration (flow) diagram that describes the flow of messages through various system(s) or applications(s).

How the integration solution is implemented, is really up to the technology or technologies that are available
to the developers. It could be implemented using one or more of the following technologies:

a) .NET
b) Java
c) a Database such as Sql Server could be used to help in the implementation,
d) MSMQ could be used to help reliably deliver the messages from application to application
e) BizTalk could be used to help carry out the integration.
f) many more tools are available.

2) Patterns create well designed integration solutions, that produce
implementations that can be easily modified and maintained in the future.

3) Patterns can help with Testing 

4) Patterns are simple (for the most part).

a) Splitter (Splits Messages)
b) Aggregator (Aggregates Messages)
c) Content Enricher (Will add more information or missing information to messages)
d) Normalizer (Normalizes messages into one common format)
e) There are approximately another 60 Patterns.

The name of the pattern often describes what the pattern does. But there is much to consider in an individual pattern.
For example:
In an Aggregator pattern, what happens if there are ten expected messages to be aggregated , but only nine messages show up?

Patterns and BizTalk

BizTalk can be used to implement patterns.
For example: If you have worked with BizTalk, you can quickly think of two ways to easily
split a message (a couple are an Envelope or split the message in an orchestration).

The following features in BizTalk aid in implementing patterns (Note: This is not a complete list)
a) The publish and subscribe model that BizTalk implements.
b) Physical Receive and Send Ports.
c) The correlation features in BizTalk (Correlation Sets, Property Schemas etc).
d) Mapping in BizTalk
e) The Delivery Notification and Ordered Delivery properties in logical ports
g) Role Links and Parties
f) more and more features.

Not all Patterns are a snap to build in BizTalk, but
BizTalk does provide a great set of features to implement many of the patterns.

Where to find BizTalk examples of Patterns:

There are many places to find examples of patterns in BizTalk.
Below are just a few:

Bloggers Guide to BizTalk, has a whole section devoted to Patterns in BizTalk


My last three Blog entries have discussed some examples of patterns



Why the VSTS Logical Datacenter Designer (er, Deployment Designer) Sucks

I've had this question in many of the VSTS bootcamps I'm teaching across canada. “From my Application Diagram, how do I create a deployment diagram that shows my web application and database being deployed on the same box“.

So I posed the question to my friend and fellow RD Joel Semeniuk. The answer is:

with the LDD you CAN NOT represent a web site and a database server on the same logical server.

The Logical Datacenter Designer is used to create diagrams of interconnected logical servers that represent the logical structure of a datacenter.  They key here is the term “logical server.

Full post here: http://weblogs.asp.net/jsemeniuk/archive/2005/04/07/397541.aspx

My understanding (hope) was different. My understanding of the term “Logical“ was that in the datacenter diagram, a logical server was a “type“ of server, not a physical instance of a named machine. But if this is the way the LDD is going to work, then it's useless and I guess what we really need is a Physical Datacenter Designer. To be honest, I don't think we need a LDD, just a DD that works correctly. Otherwise, how the hell can you create a deployment diagram out of something that doesn't represent real machines - or at least a type of machine?

If the LDD is going to continue to work this way, then the deployment diagram (and even the LDD) start to look just like your Application Diagram. Furthermore, if a Logical Server is intended to be (possibly) aggregated with another Logical server to become a physical server, then why would you ever be allowed to put them in different zones. There is some serious impedence going on here. I seriously hope this gets fixed/repositioned before RTM. It would be sad to come this close to getting it right on a great suite of modelling tools.

Canadian Developer Community Radio

Mark Relph (MS Canada) posted his first blogcast as part of “Canadian Developer Community Radio“. It was recorded a few weeks ago at the ASP.NET 2.0 Deep Dive in Toronto. Lots of good discussion with the speakers, their favourite features, etc. etc. There is also a brief interview with me in which I don't say anything terribly interesting.

Click Here.

More Online Training: Java to .NET Migration


This link will get you 15 hours of free migration training online.

Topics include:

  • how to map common J2SE and J2EE functionality to the equivalent .NET Framework functionality
  • how to migrate J2SE and J2EE services to the .NET Framework
  • deploying .NET applications
  • automated migration techniques
  • migrating JDK 1.4 applications and code