Adobe Photoshop Scripting

I’ve used Adobe Photoshop for a while now and never really progressed beyond the basics.  That is, until recently, when faced with the challenge of putting together a collage image for an Enterprise Search presentation that I’m working on.  The idea for the image was not mine.  I saw the document icon collage idea when researching online material.  Of course, I sought to acquire an acceptable copy of the image but, to no avail.  So, I designed my own, shown here:

document_icon_collage_med

Clearly, with very basic Photoshop skills in hand, the prospect of inserting and aligning different sized document icons, in random order, was daunting to say the least.  And, even worse would be the prospect of having to redo the layout if either the results were crap, or different icons or icon arrangements were needed.  One could easily end up going blind and getting carpel tunnel syndrome.

Automation was needed and this is where Adobe’s ExtendScript Toolkit saved the day.  The toolkit provides a scripting editor where you can write ExtendScript to manipulate and build a Photoshop image.  ExtendScript is Adobe’s extended implementation of JavaScript, so anyone familiar with JavaScript will have no problems writing ExtendScript.

So, putting my geek hat on, and with the ExtendScript Toolkit to hand, my high-level approach was as follows:

  1. Create two different sized sets of icons.  Each set stored in their own folder.
  2. Create the framework image which contains the effects layers (e.g. shading, shadowing, etc) and separate layers for the icons: small icons collage, large icons collage, and the spotlighted icon.
  3. Write an ExtendScript function to open the icon image files and randomly copy each icon image (from the “pool” of opened icon images) into the icon layer in aligned rows, repeating until the entire image is covered.  The function would be run for each icon collage layer.
  4. Manually add in the spotlighted icon as an “illuminated search hit”.

Now, I have script that I can reuse to build alternative icon collages or build other type of collages.  The script has literally saved me hours and hours of work.

Maybe there’s way of easily achieving the same thing without resorting to scripting?  If so, please let me know.

Get in touch if you’re interested in more details about the script implementation.

Technorati Logo , , , ,

Growth at the Expense of Brand Value

On the subject of coffee parlours, today I read a great diagnosis of the growth-induced erosion of Starbucks’ brand value and, consequentially, the erosion of their growth.  Clearly Starbucks have lessons to learn about balancing growth with brand, but they certainly aren’t new lessons.  What happened?  Read John Quelch’s article “How Starbucks’ Growth Destroyed Brand Value” to find out.  Allen Roberts posted a comment that nicely sums up the value of the brand:

This maintenance of the integrity of the brand as THE vital component of the value proposition to the consumer is basic marketing 101. Starbucks when they started knew this, and practised this as if their life depended on it, as it did!  However, it is the easiest thing to compromise when the driver becomes numbers, and short term financials, as tends to happen after an IPO, as brand integrity and the relationship consumers have with a brand is not easily quantifiable, so is less visible, easily ignored by (often) new management under the pump for results who have not “lived” the brand.

Technorati Logo , ,

The Last Mile

I like the coffee from Take 5 Cafe. Beats Starbucks hands down.  I mean, when all that the Starbucks “barista” has to do is press a button to brew a shot … well, I’m sure Starbucks was aiming for infallible consistency while maximizing throughput but they lost the plot when it comes to the ceremony and “romance” of the coffee shop.  Starbucks CEO Howard Schultz admitted as much in a leaked memo:

…when we went to automatic espresso machines, we solved a major problem in terms of speed of service and efficiency.  At the same time, we overlooked the fact that we would remove much of the romance and theatre that was in play with the use of the La Marzocca machines.  This specific decision became even more damaging when the height of the machines, which are now in thousands of stores, blocked the visual sight line the customer previously had to watch the drink being made, and for the intimate experience with the barista.

The romance and theatre of a serious coffee parlour are core ingredients of the business, not last mile ingredients and Take 5 have got it right compared to Starbucks.  A beautifully crafted espresso machine, a delight to behold, is used by the barista (occasionally a delight to behold) to brew espresso shots.  The sounds of the production are classic espresso machines sounds.  Coffee aromas are untrapped in their portafilters.  European styling. Granite countertops to receive the coffee product.  We have theatre. Delivered, finally, is your coffee order and we’re now at the last mile stage.  To prevent the heat of the coffee from burning your hand and pissing you off so much you decide to sue because, ummmmm, you were never properly taught thermodynamics in high school, a sleeve is used to give you a comfortable, cool, area to hold the cup. Yep, the sleeve is one of those “last mile” items.  Take 5 have screwed up at the last mile by using an ugly plastic sleeve that feels like you’ve grabbed hold of a squid.

plastic_sleeve1

So, it looks and feels like crap.  Does Take 5 really want to have their carefully designed, eye pleasing, coffee cup adorned with such a sleeve?  What are they saving per sleeve over the cardboard variety?  0.5 cents?  1 cent?  Yes, it must be about money because I can’t believe the Take 5 management would vote for the plastic sleeve over the cardboard sleeve if the costs were the same.  Or, maybe I’m wrong, and the plastic crap keeps the heat at bay better than the cardboard sleeves?  If so, then give me the heat.

Headline news: “The Sleeve That Sunk Take 5 Cafe”.  Not going to happen and that’s not what my herniated sleeve yarn is implying.  But, no doubt, businesses loose custom beyond a sustainable level (i.e. they fail) because they’ve overlooked or ignored last mile aspects.

I’m a details guy.  It’s the nature of my job in Information Technology. So “last mile” stuff is always on my radar and I’m continually miffed at how many people and companies don’t understand the importance of hitting the ball out of the park for those last mile items.  Tom Peters wrote a book called “The Pursuit of WOW!” in which he explains how important it is for businesses to have pleasant, clean bathrooms.  If memory serves, I believe he solidly drove home the point that you’re an idiot if you neglect your washrooms as a business owner in a competitive marketplace.  You establish your business, plan your brand, build your brand, take care of all the core pieces, cut the ribbon, unveil the business …. and the “last mile” toilets, well, go down the toilet.  Sure, a majority of new business starts don’t build hole-in-the-ground toilets; unless you’re starting a business in France or China.  But there’s still a noticeable number of establishments that screw up either right out of the gate, or through neglect over time.

Speaking of washrooms, one of the premier examples of a business hitting it out of the park for their washrooms is Cactus Club Cafe.  Talk about the pursuit of toilet WOW.  The washrooms at the Cactus Club on the corner of Broadway and Ash are fantastic. Immaculate, spacious, beautifully designed and decorated, a leather couch, etc … basically a posh studio apartment with modern decor.  People talk about the Cactus Club washrooms as part of the Cactus Club experience; they add value to the Cactus Club brand. Flush with style.

What aspects of your business operate in the last mile zone AND could serve as differentiators in a competitive marketplace?  Find out, focus on them, and improve.

Technorati Logo , , ,

MSIL Foray

Recently I took a dive into the world of Microsoft Intermediate Language (MSIL).  Why? I didn’t yet have the source code for an assembly I was referencing and I needed to remove a date validation constraint that was affecting the solution.  This is how I resolved the situation:

  • Disassembled the assembly into Microsoft Intermediate Language (IL) using the Microsoft IL Disassembler (ildasm.exe) located in “C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin”.
  • Edited the MSIL file and updated the date validation code to pass validation.
  • Assembled the IL back into an assembly using the Microsoft IL Assembler (ilasm.exe) located in “C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322″.

Pretty straight forward except for having to learn some MSIL.  Oh, and there was also the effort required to identify the area of code in question.  To cut that story short, I’ll simply say that I pinned down the boolean variable that was used to determine if today’s date was within or outside of the hard coded date range … and that variable is simply “named” variable “2″. I searched the MSIL file for all areas where variable “2″ was updated and then came across the date validation logic that I had to amend.

Following is the MSIL code snippet containing the date validation check which I’ve amended to pass validation by “widening” the year values.  This snippet is asking the question: Is the current date between Oct 3, 2009 and Aug 7, 2000? If so, then the “date invalid” flag is set to true, otherwise leave the “date invalid” flag as false.

  • IL_0017: Get the current date and push it on to the stack.
  • IL_001c: Push the value 0×7d9 (2009) on to the stack.
  • IL_0021: Push the value 10 on to the stack.
  • IL_0023: Push the value 3 on to the stack.
  • IL_0024: Instantiate a DateTime instance for the date Oct 3, 2009. This will pop the year, month, and day values from the stack leaving the current date (from IL_017) at the top of the stack.
  • IL_0029: Compare the current date to Oct 3, 2009 and place the result on the stack.
  • IL_002e: Load the value 0 on to the stack.
  • IL_002f: Compare the value 0 (from top of stack) to the DateTime::Compare result (second from top on the stack) and branch to IL_004a if greater than or equal. In other words, if “Now” is greater than or equal to Oct 3, 2009, branch to IL_004a where the date validation flag is set to true, meaning “failed validation”.
  • IL_0031 to IL_0048: Compare “Now” to the date Aug 7, 2000 and branch to IL_004c if “Now” is greater than or equal to Aug 7, 2000. In other words, branch past the code that sets the date validation flag “invalid” (value of 1).
  • IL_004a to IL_004b: Push the value 1 (true, in this case) on to the stack and store that value (stloc) in location 2 (”variable 2″). In order words set the “date is invalid” variable to true.
Technorati Logo ,

Roberto Announces Connected Health Framework

Roberto Ruggeri has just posted an article announcing the publication of the Microsoft Connected Health Framework.  As usual, Roberto has done a good job of introducing and explaining things and, therefore, you should be able to easily discern how the Connected Health Framework (CHF) is being positioned.  I really like Roberto’s focus on how CHF is not intended as a vertically targeted, technology-centric framework but is, instead, geared towards the interaction of services and business components in a industry-neutral manner. As Roberto says:

What makes a solution specific to healthcare is the type of messages that are exchanged, the security and policies for authentication, authorization and information access and of course the nature of services and business components

Technorati Logo , ,

Andrei Talks about Christopher Alexander

Andrei Kossoroukov has started writing some interesting pieces about Christopher Alexander and software architecture (see part 1 and part 2).  A while ago I read Christopher Alexander’s The Oregon Experiment, and thoroughly enjoyed it.

Technorati Logo , ,

Onfolio Integrated Reader & Content Collector

Pluck used to be my RSS reader.  I chose Pluck because I wanted a reader that was integrated into Internet Explorer.  But Pluck developed problems: notifications of new postings that didn’t exist, Pluck server outages, unresponsive to support requests.  With Pluck no longer responding to queries and no longer mentioning their RSS reader product on their web site, I went on the hunt for a new IE-integrated reader.

It didn’t take too long to come across Onfolio:

Onfolio is the easiest way to collect, organize and share your online research.  Onfolio is an add-in for the Windows Live Toolbar that helps you collect and organize online content, read RSS news feeds, and share content in emails, blogs and documents. With Onfolio, you get all of these tools built into your browser for simplicity. Whether you are planning a trip, looking for a job, investigating a major purchase, or simply looking for a better way to keep up with the news that interests you, Onfolio will help you be more efficient, thorough and organized.
http://www.onfolio.com/product/toolbaraddin/

Onfolio Screen Shot

I’ve been using Onfolio for a few weeks now and, so far, I love it.  The only problem is that your feeds are not centralized (i.e. not tied into an online account).  However, I expect that problem to be cured by Microsoft (yes, Microsoft, who recently acquired Onfolio and have made it an add-in for Windows Live Toolbar).

Others have posted articles describing Onfolio in more detail.  Check out: Onfolio - Two Thumbs Up and Microsoft Onfolio is a recommended MSN Toolbar add-in.

Technorati Logo , ,

Microsoft SOA & Bus. Process Conference 2006: Day 4

Denny’s Restaurant Session
Bellevue, Washington, 3:00am
At approximately 3:00am, me and two of my colleagues decided to do a bit of food research at a Denny’s restaurant in Bellevue.  You could call this our first morning session.

There is More to Life in Healthcare Integration than Technical Compliance
Elizabeth Redding, Partner2Learn
Elizabeth has been helping healthcare organizations with technical compliance over the past 10 years and has a lengthy background developing healthcare plans. Based on the title of the session, I suspected that we would be getting slides that state the obvious. Sure enough, one of the slides stated that “Focus should be on the business…”. I really didn’t think it was necessary for the presentation to include such basics when the focus should be more on providing deeper insight into service oriented architecture and business process management from a healthcare perspective.

She spent some time talking through the benefits of the BizTalk integration model using an HL7 patient administration message workflow as an example and also eluded to the benefits of using the BizTalk BAM (Business Activity Monitor) and BRE (Business Rules Engine) in the mix.

On the subject of the administrative overhead in healthcare she said that when HIPPA was first introduced, the [American] healthcare industry was spending 40% of their budget on administrative overhead. From a Canadian perspective, she said that the administrative overhead is currently massive and one of the reasons has to do with the reporting of data which is apparently a burdensome process. She wasn’t specific about the nature of the reporting and how the data is reported so if anyone knows what she’s talking about please post a comment to explain.

Developing and Maintaining Business Rule Solutions
Richard Seroter, Technology Specialist, Microsoft

I thought this presentation would focus solely on BizTalk BRE but Richard did a great job delivering useful content in other areas which made the session worthwhile.

Why have business rules? Richard provided the 3 standard reasons: 1) Accessibility, 2) Flexibility, and 3) Manageability. He then talked briefly about the iterative BPM lifecycle comprised of: Model and Design, Develop and Deploy, Manage and Interact, Analyze and Optimize. What Richard was saying, was that establishing and implementing business rules requires the same level of professional analysis and design as you would conduct for other business solution areas. I guess that’s pretty obvious but I imagine that are lots of organizations/people out there who design and implement business rules in an ad-hoc manner in the wrong places. Actually, Richard did point out that many people implement business rules in inappropriate places like stored procedures, user interfaces, and web service implementations. Yes, I agree, many, many people have done this and it can severely impair a solution’s adaptability making it a very costly endeavor to upgrade applications to accommodate changing business rules.

In addition to BizTalk, Workflow Foundation (WF) also provides a rules engine. The following table is a comparison of the two:

BizTalk BRE   Workflow Foundation Rules
Rete-based algorithm   Forward executing algorithm
Xml/database/.NET facts   Workflow variables
Vocabularies   No vocabularies
“If … Then” semantic   “If … Then … Else” semantic
Explicit chaining   Implicit chaining
Runtime infrastructure (e.g. tracking, security)   Custom coded
Rules built using the BizTalk BRE Composer   Built in Visual Studio .NET

Other takeaways include:

  • In BizTalk, when rules are executed via an orchestration, the rule execution can be tracked, allowing you to view the tracking information to discover which rules were used/fired. However, if you call the BRE directly via a .NET class, you cannot do tracking by default. To enable BRE tracking via .NET, you need to implement a certain interface provided by one of the BizTalk BRE assemblies (can’t remember which one; will leave it to you to do the search) and pass the implementation of that interface to the BRE call.
  • Richard feels there is a business opportunity around the development of customized rule solutions (e.g. rule templates, function libraries) for verticals (e.g. healthcare).
  • RuleBurst is a product that is used to administer complex business rules. Richard did a quick demo of RuleBurst and it did look impressive (much more comprehensive than the BRE composer). It uses a Microsoft Office rule design surface (e.g. rules can be edited directly in MS Word), has a robust management console, and, apparently some great QA (Quality Assurance) testing capabilities.

Web Services Factory
Don Smith, Product Manager, Patterns & Practices, Microsoft
Web Services Factory can be summed up as follows (from Microsoft’s Web Service Software Factory article):

The Web Service Software Factory (also known as the Service Factory) is an integrated collection of tools, patterns, source code and prescriptive guidance. It is designed to help you quickly and consistently construct Web services that adhere to well known architecture and design patterns.

Don was a very enthusiastic presenter and did a decent job of explaining the concept and implementation of the web services software factory. At a high level, Don explained that a software factory is about “communicating” between the architect and the developer and between the architect and the business; in other words, to help increase “communication” across the board. That sounds rather vague but he did go on to explain a bit more: “It’s about allowing the developer to have a conversation with Visual Studio“. Ok, still vague. How about: “an implied or suggested process that you go through to build a solution“. Or, better yet, he also described a software factory as something that helps you build a specific kind of application via the incorporation of a variety of guidance content type including: architecture and design guidance, patterns, and help, reference implementations, application blocks, and guidance packages. To be fair, Don did a pretty good job of trying to explain the concept of a software factory. However, from an implementation perspective, the term “software factory” seems loosely defined (like SOA), starting out as something based on DSLs (domain specific languages), then something that uses GAT and GAX, then “morphing” into something that is being wrongly interpreted as simply a code generator. Microsoft’s answer to the question “What is a Software Factory?” can be found here.

Underpinning the web services factory are two core components: GAT (Guidance Automation Toolkit) and GAX (Guidance Automation Extensions). These are the components that allow “factory builders” to extend Visual Studio 2005 to author and run guidance packages which contain “templates, wizards and recipes, which help developers build solutions in a way consistent with the architecture guidance“.

The services factory contains guidance for designing messages and service interfaces, applying exception shielding and handling, designing business entities in the domain model, translating messages to and from business entities, and designing, building, and invoking the data access layer. The first release of the Services Factory was an ASMX (web services) release in July 2007; the WCF release is scheduled for December 2007.

This session was a great demonstration of the capabilities of the GAT and GAX components and how they can provide substantial benefits in driving solution development.

Technorati Logo , , , , , , , , , ,

Microsoft SOA & Bus. Process Conference 2006: Day 3

Data and Transaction Management
Steve Swartz and Clemens Vasters
Connected Systems Division, Microsoft
The core foci of this presentation were the characteristics and architectural patterns related to data storage and data access. The core takeaways were the importance of early data architecture envisioning and that the correct data architecture is the ultimate performance optimization. For experienced architects and developers in the audience, the session likely served as a refresher on the topic of data architecture.

Steve talked about data characteristics from two perspectives: scope of the data and class/type of data. Data scope included: My Database, My Shared Data, Our Database, My Huge Database, My Distributed Database. Classes/types included: Reference Data, Fresh Data, Stale Data.

As Steve puts it: “Increased collaboration changes the architecture perspective”. Thinking about data scope, the growth in data scope, data concurrency and correctness, should be one of the central tasks of early data architecture. That may be obvious, but Steve suggested that too few people consider the larger “enterprise wide” data picture when architecting solutions. I agree.

Next were the architectural patterns which included: Direct Access, Remote Access, Intermediated Access, Error Handling via ACID, Error Handling via Accounting, Error Handling via Compensation, Distribution via Caching, Distribution via Federation, Distribution via Read-Only Replication, Distribution via Read/Write Replication, and Distribution via Reporting.

The intermediated access pattern is a rich and important pattern that places processing in front of the database to control access. It is the mechanism used to achieve federated queries and therefore is a part of the federation distribution pattern. When talking about the “Error Handling via Compensation” pattern, Steve mentioned something about Microsoft working on automatic compensation capabilities? Anyone know about this? BizTalk allows you to implement the compensation pattern for long running transactions (which he mentioned) but I’m sure Steve wasn’t referring to BizTalk. “Error Handling via Accounting” is the error pattern that persists errors and then reports them for “manual” resolution. This is in contrast to the ACID error handling pattern which uses transaction management to provide automatic error handling. ACID performs much better (obviously) but does not scale as well as the “accounting” approach.

Driving Business Process Automation through Vertical Accelerators
Brennan O’Reilly & Mark Smith, EMC Microsoft Practice
This was a weak presentation with plenty of platitudes, basics and generalities on how to design integrated business systems with some focus on manufacturing, financial services, and healthcare verticals. I was hoping to get some good insight into the design of accelerators for the BizTalk platform, but left disappointed.

The healthcare part of the presentation referred to the American healthcare industry and dealt almost exclusively with billing and insurance solutions. Actually, they didn’t explicitly refer to the American healthcare industry but it was obvious from their focus on billing and HIPPA.

Effective Techniques for Handling Large Messages in SOA
Thomas Abraham, Senior Consultant/Architect
Microsoft Solutions Practice
Biggest takeaway from this session was his idea about carving up a large message in a custom pipeline component. The idea is to slice up the message, writing the “large” piece to temporary storage and then using a proxy ID in a cut-down version of the message that flows into the message box. The proxy ID “points” to the “large” message piece in temporary storage and is used to retrieve that piece for pipeline assembly on the way out of BizTalk. Not rocket science but a very useful tip for reducing the load on the message box and improving performance.

When Thomas was discussing ASP .NET 2.0 coding practices, he stated that it’s important to think about memory management. Since the introduction of garbage-collected languages, I have been saying the same thing. Ever since I started working with Java, and now C#, I have regularly come across developers who ignore the memory usage characteristics of their software and then wonder why they are having performance issues.

BizTalk Server 2006 R2 Adapter Framework
Chandramouli Venkatesh, Group Manager
Connected Systems Division, Microsoft
Chandramouli did a good job of presenting on the upcoming BizTalk adapter framework. Microsoft’s motivation behind the creation of an adapter framework is to unify their approach to adapter development enabling “…easy development of metadata-driven, host-agnostic, custom adapters to LOB systems”. This is great to see and should hopefully make the prospect of developing a custom BizTalk adapter a less intimidating experience; I haven’t developed a custom BizTalk adapter myself but I keep hearing that it’s not a trivial task.

In keeping with the harmonies that Microsoft is creating around WCF, the adapter framework will extend WCF and adapters will be surfaced as WCF bindings which will make the adapter’s consumption exactly the same as WCF service consumption. This means that custom adapters will be usable across different consuming hosts (e.g. BizTalk, a custom WCF host) which is a big win.

From a development perspective the adapter framework will ship with a rich set of development tools which will automate and simplify much of the coding required for adapter development. Microsoft’s current thinking is that the adapter framework will be made available as a separate download.

Technorati Logo , , , ,

Microsoft SOA & Bus. Process Conference 2006: Day 2

With a good dose of business-focused keynotes and sessions under my belt, I was ready for a bit of a technical dive. So, my first session of the morning was WCF: Extensibility in the WCF Service Oriented Platform, presented by Craig McMurty, Technical Evangelist at Microsoft. It started with an introduction to Windows Communication Framework (WCF) which probably could have been shortened. A couple of highlights from this session:

  • The presentation’s central theme was the WCF ability to “inject” custom functionality (i.e. extensions) at various stages along the path that a WCF message travels on both the client side and the server side. Such custom functionality can deal with specific requirements around serialization, threading, etc.
  • Craig said that WCF was a “software factory” for communication. There’s that expression again, “software factory”. Since its inception, “software factory” has been liberally bandied about when talking about a number of software development spaces. If I recall correctly, the term “software factory” had a precise meaning that doesn’t encompass each and every domain-specific API that comes along. Ok, I’ve just returned from an evening out with my colleagues where we discussed my objections to the liberal use of the expression “software factory” which now seems to include the realm of WCF. My colleague, Adam Bowron put forth an excellent argument in defense of the association of “software factory” with the code generated by WCF. He explained that the generation of the WCF code infrastructure to support a specified contract and protocol requirement (i.e. a specific service communication domain) can legitimately be labeled as a software factory example. When the term “software factory” was first “born” I believe this was the basic description:

    “A Software Factory is a software product line that configures extensible development tools like Visual Studio Team System with packaged content like DSLs, patterns, frameworks and guidance, based on recipes for building specific kinds of applications.”

    http://www.theserverside.net/news/thread.tss?thread_id=29651

    Does this description apply to WCF? Perhaps. WCF has patterns and guidance but are they packaged and primed to kick-start the development of WCF solutions?

The next morning session in line was a presentation called Avoiding 3 Common Pitfalls in Service Contract Design. Tim Ewald (Principal Architect at Foliage Software Systems) did a reasonably good job at explaining his position against building consensus around the definition of enterprise-wide canonical representations of business entities. One of his central tenants is that flexibility in data models is one of the keys to SOA success. The 3 command pitfalls he talked about were:

  1. Too much required data. The trouble is that you may want to adopt a corporate data model for a certain business entity (e.g. a customer) but the system you are dealing with simply cannot supply some of the schema’s required information; an issue of cardinality. This forces you to take one of two approaches: 1) Gather data just to fulfill the schema requirements, or 2) Use garbage data. The solution is to make the schema elements optional (i.e. minOccurs=”0″). With a schema you should be saying “if you can supply the data in this shape (i.e. the correct sequence of elements) I’m ok but if you change the shape (i.e. out of order elements/types) then we have a problem”. Bottom line: enforce the occurrence constraints down at the system level.
  2. No Solution for Versioning. Before designing data contracts is it crucial to first establish a clear schema versioning policy that governs how the schema can change. Tim suggested that changing namespaces makes systems incompatible and offers “lower value” and goes on to say that namespace changes can be minimized with a few simple rules which include; 1) Create an instance document based on the schema version you have, 2) Always consume an instance based on the schema version you have, 3) If you want to do validation, make sure you do careful validation that doesn’t fail if, for example, new elements are detected at the end of types (i.e. the core schema version has changed to include new elements). If you want to develop flexible, loosely coupled systems then you need to be prepared to ignore some schema validation errors (e.g. unknown elements that appear at the end of a sequence). Flexibility is enhanced by a versioning policy that allow clients to extend their data contract to include new types or new elements at the end of a sequence.
  3. No System-Level Extensions. What if you want to add new elements to your version of the schema? According to Tim you should be able to extend your version of the schema and, therefore, the core schema authors should support this by “leaving a slot in the schema for clients to extend their version”. Tim went on to say that by enabling and promoting extension capabilities, the core schema team could “learn” from the extensions applied to “local/departmental” versions and then incorporate those extensions, as needed, into the core schema over time (i.e. a “harmonious” and flexible evolution of the core canonical representation driven by “feedback from the trenches”).

Tim summed up by asking us to rethink the “big bang” canonical design approach and, instead, start with a base model designed to facilitate the evolution of incremental value. This approach, according to Tim, would allow the user to adopt core schema versions at their own pace without sacrificing business goals.

After a quick bite of lunch, my colleague (Adam Bowron) and I hooked up with Jim Boyer (a great Technical Specialist from Microsoft). We walked across the street to the BizTalk product building for a meeting to discuss BizTalk 2006 end-to-end message ordering with one of the Microsoft BizTalk product/program managers. I won’t go into the details at this point expect to say that the discussions centered around enabling BizTalk to maintain FIFO message order regardless of the impact of multiple orchestrations and other BizTalk activities which can alter the original order.

Our meeting at the BizTalk building cut into the first afternoon sessions and I arrived half-way through the presentation on Building an ESB on the Microsoft Platform. I really didn’t take away much from the remainder of the session except that it looks like there is some interesting work going on around the BizTalk platform to provide a compelling ESB-esque story. My colleague mentioned that there is good work being done around enterprise-level exception management (leveraging the BizTalk 2006 failed message routing feature).

My final session of the day was entitled Get Your Processes Talking! Speech, Workflow & BizTalk United. Presented by Jon Fancey (Principal Consultant, NetStore) and Albert Kooiman (Senior Business Development Manager in the Unified Communications Group), the aim was to show how Communication Server 2007 and BizTalk can work together to deliver speech-oriented workflow solutions. This session was really all about showcasing Communication Server 2007 with a little dash of BizTalk. The speech capabilities in Communication Server appeared impressive and the design experience in Visual Studio looked great (i.e. creating a new speech workflow solution). The intention is to optimize human workflow processes via automation and thus improve service levels. My thinking at this point was that organizations need to be extremely careful about fronting their service function with a machine. Not all customer service scenarios are suitable for speech-based human workflow processes. I would go so far as to say that few customer service scenarios are suitable for the machine interface. When customers make a service call to an organization they typically do not want to talk to a machine.

Technorati Logo , , ,