Cross Pollination: kiwifoo camp

Cross Pollination: kiwifoo camp

Warning this is a very long post so get yourself a coffee and come on in 🙂


It is Sunday evening in some timezone and I’m handwriting this blog post using Windows Live Writer on board a 747 inbound to Seattle for a week long technical briefing. I have spent my weekend at Baa Camp (a kiwi version of the O’Reilly Foo Conference). The event was organised and tirelessly run by Nathan Torkington and his family. Nat briefly introduced the event on the Friday afternoon, “Hi I’m Nat I work for O’Reilly we organise foo to bring you together to invoke conversation so that we can learn about the next trends as you create them”, he then went on to say “although I think you’ll take more away than we do from talking to each other this weekend and that’s ok too”.


It was the ultimate anti conference, at the start of the conference very few sessions were organised… half an hour later a full weekend worth of six simultaneous sessions were locked into the A3 paper on the walls. Everything from “Ambient Signifiers” to “body modification and enhancement“.


The conference was a melting pot of business leaders, politicians, designers and of course heaps of open source developers.


Being one of the few Microsoft developers at the event (and the only one there that works for the company) it felt like the ultimate “cross pollination” opportunity. I was able to get an insight from some of the brightest thinkers that Mozilla, Google, Rails, Php & Java has to offer.


I had a conversation over dinner about working for Microsoft and attending a conference like foo I likened it to playing a game of sport… We play hard against our competition and we play to win, while others in the crowd fight with each other about who has the better team. After the game we socialise with each other are in amid of each others top players and share a common interest which is the love for the game. Nothing calls this out more than the recent ralying of Silicon Valley’s greatest to search for missing Microsoft Researcher and legend Dr James Gray.


It was for this reason that I was disapointed to see Kathy Sierra’s recent post on the difference between Jeff Bezos and Bill Gates. The talk Jeff Bezos came to was at O’Reilly’s Foo Camp… I think given the opportunity anyone at Microsoft (including Bill Gates and Ray Ozzie) would consider attending Foo, did anyone bother to invite Bill along?



The first session that I attended on Friday was conducted by David Cunliff on the state of broadband in New Zealand. Unfortunately there was nobody from telecom invited to the conference as they really got a going over. At one point the room even joked that Rod Drury should take the job of Telecom’s new CEO. When David was questioned about the time it would take to force the unbundling, the minister joked “we thought of a number and added a zero and that will be the fine per day”. David claimed “I want this to be the year of IT!”. David elicited some feedback on the unbundling process and was surprised to hear that the people in the room, especially Andy Linton (citylink) valued “peering” as a more important problem to solve than unbundling. Andy likened it to forcing ISP’s to dump their money offshore. He also claimed that local peering gives you reliability. David’s response… “Thank you for helping me write my action plan for 2007… As of tonight peering is an important issue”.


I organised a session in the car park Friday night… I wanted this session to be devoid at technology and instead a voyage of audible discovery. We setup 4 cars in each corner of the netball court and enjoyed the quadraphonic sounds of Zaireeka (no format shifting here). The vospertron team provided the visual effects.



The next day I presented a session on “What the hell is XAML?” A guide to presentation on windows. There were only a few people that came along amongst them was Robert O’Callahan an Auckland based developer who works on the core engine in firefox. Robert has recently left Novell to set up a small mozilla office in Auckland, Asa Dotzler even joked (?) to me that he liked NZ so much that he might even move here! I organised a lunch with Robert last year after reading this post he did on the New York times reader. It was hard to explain that XAML was a platform technology that doesn’t really have that much to do with HTML on the web aside from binding to web based apis & feeds. Robert was asking how WPF renders HTML that may be mixed in with the feed data?  Robert cautioned that there is alot of feeds out there that contain presentation markup in amongst their data. I guess in a WPF world you simply strip off that mark-up & render the data & images themselves using a document flow control 🙂 Anyone out there doing this? As an aside I did notice a nice client visualisation app of Wikipedia pop up recently using some of these WPF controls that you might like to try out (.Net 3.0 runtime required).


Rod’s & Phil did a great job spreading the word about their new xero project (Phil told me that Rod originally wanted to call it Accounting 2.0). All through the weekend they had made some eye catching shirts that even Ben Goodger was wearing one on the last day.



Ben Goodger & Robert O’Callahan (Rod’s got ben in Xero)…


Unfortunately I didn’t attend Roberts session on what’s coming in Gecko 1.9 but I did read Rod Drury, Juha and Robert’s (thanks for the plug) blog posts on the offline application support that is coming in this version. Since I didn’t attend the session I don’t really have a grasp on what exactly is being proposed here but if I understand correctly from Rod’s post Robert is proposing an engine to support caching a website client-side through the browser and providing a method to interact with that cached site to perform tasks such as filling out forms and pushing that data to persistent local storage that will be “posted” when the browser next goes online… a bit like a live cache. I implemented similar solutions to this back in 2000 when I was building HTML based email survey applications and delivering them to respondents with email but no Internet access. I used cookies to allow people to go back to their partially completed forms and I created client side caches of post data that I could hash using a client side JScript based MD5 algorithm. I’d then queue up these results to be submitted via an IMAPI interface when the machine was next online or with email access, once the “email” with the post data was received I would compare the hashes to confirm that the data hadn’t be manipulated enroute and process the information on the server. This system worked flawlessly (while until at least the first email based jscript virus was created ;).


I’m not convinced that creating an offline engine is going to be easy for modern web applications to adopt. More and more websites are being written using (AJAX) to over come the stateless nature of the HTTP protocol and create a synchronised experience for your site users. Any smart client developer knows that you write your site/ transactions differently to address contention issues that can result from having and changing data that may have also changed on the server during the time in which you are working offline. Of course contention is an issue on live websites that have many users updating the same data at potentially the same time but during development assumptions may have been made relating to the fact that the site was expected only to be used online. In most cases I perceive that redevelopment would be required by the website creator to support an offline web model. Further to this I also attended Judith Tizard‘s session on the proposed changes to NZ copyright law where she talked of potential copyright implications of saving webpages to your local machine without the sites knowledge or permission. I image interacting with a companies website offline without their permission might fall into a copyright grey area that static caching manages to avoid.



Another session that I enjoyed was Justine‘s session on “Faceted Navigation“. I have had a few conversations with Justine at the Auckland UPA user group meetings and she really knows her stuff. The people attending was a good spread of kiwis with an interest in User Experience. Natasha (TradeMe), Tomek (Project x), Rod Drury (xero), Philip (xero), Che (shift), Tim, Rowan (TradeMe), John Clegg (Project x), Ross Howard (shift), Don Christie (Catalyst IT), Lulu (Hansel), Martin Sidoruk. I didn’t really get the concept at first. Justine explained… think of it like removable breadcrumbs; where the facets are user-editable values.


Rowan asked “What is broken with hierarchies?”


Justine responded “Heirarchies are like dead-end garden paths… hierarchies are personal to whoever creates them.”


To learn more check out facetmap.com… very cool.


The surprise gadget success for the conference was the Nintendo Wii. It was the first time I had tried one & I had a great game of tennis against Rowan. Someone had an application on their mac that picked up the feed from the wireless Wii handset & turned it into a light-saber.



Juha tries bowling


Natasha & Rowan were also sporting some t-shirts that he had made with huffer (like we did for webstock last year) for staff Xmas presents at TradeMe, they sported Sam’s original TradeMe logo and were also very cool.


I enjoyed Pete Yandell’s rails session where we dug a little into the guts of the language.  I didn’t realise rails spawned from a language that was created in Japan. Pete explained why Japan doesn’t like Unicode and the Multibyte for Rails Project. We explored how flexible a framework rails really is and explored an interesting concept of overwriting the system time in a running rails instance, I was left the notion just because you can do it doesn’t necessarily mean it’s a good idea 😉


That night it was time for another social dinner followed by a spot of cricket…


 


Then later Chris DiBona rolled out a game of Werewolf (what a great game!)



Pia Walsh (linux Australia) couldn’t get over how dodgy she thought I was eventually leading to us both losing the game to the convincing Lulu (there are no werewolves in India, yeah right!?)


On Sunday Chris DiBona held his session on One Laptop Per Child.



 Kelly Goto asked Bill Gates his thoughts on this project last December.


The final session that I attended was a bit of a think tank on the next Webstock conference to take place from the 11-15 February 2008. This session was organised by Natasha Hall (Trade Me) and Mike Brown (Signify), there were only a few of us there due to the fact that other popular sessions were on at the same time.


Of the people involved in the conversation where Chris Shiflett of PHP fame and Pia Walsh (linux Australia). We got talking about accessibility then open source projects then JAWS and how necessary and expensive it is as a screen reader application. I got thinking about the screen reading technology inside of Vista that is tied into the speech recognition piece and the new speech SDK that is part of .NET 3.0… now that could be a valuable open source codeplex project for some .NET developers to get their teeth into.


All in all kiwifoo was a great conference and I am very happy that I was invited along. I hope I contributed enough to get another invite next year. Great work Nat and Russell.


Russell Brown has also done a great write up on the conference here and people are sharing their photos here and here.


I’ll leave you with a little video mashup (mostly cellphone footage) of my time at foo. Nathan has inadvertently provided the Bango music! enjoy.



Tags: kiwifoo, baacamp


This posting is provided “AS IS” with no warranties, and confers no rights.

BizTalk, .NET 3.0 and Insurance System Designs – what a Gem!

A collegue of mine pointed me in the direction of this whitepaper
http://msdn2.microsoft.com/en-us/library/bb220799…. that
talks about

Building Interoperable Insurance Systems with .NET 3.0 Technologies
(me being onsite at the moment at a financial services client – this comes
in super handy!)

Talks and walks through the design and developing tooling and problems faced during
implementation.

A great article to get a feel for some of the issues at hand.(look past the SQLServer
2006 mentioned on page 2 🙂

Enjoy.

BizTalk Server 2006: Auto-Construction of Orchestration Variables Considered Harmful

Don't get me wrong.   I think the world of BizTalk as a product.   But, like any complex piece of software, there are one or two things that annoy me.  I blogged a few weeks ago about the xpath() function, and the way BizTalk decides how to initialise an internal XmlSerializer instance based on the type of the variable to which you assign the xpath() result.  If you type your variable inappropriately, your code breaks at run time with a problem that is difficult to diagnose.

Another orchestration issue which caused me some suffering a few days ago is the auto-construction of orchestration variables.   If you create an orchestration variable of a type that has a default constructor, BizTalk will, by default, auto-construct your variable using that constructor.   I've never really understood the logic of this design.   First, it seems a little inconsistent.  Some types don't have a default constructor, and hence cannot be auto-constructed by BizTalk.   Second, the fact that auto-construction, where applicable, is set as the default behaviour is just downright dangerous.

Here is a real-world scenario.   As always, you are up against a tight deadline to complete your work.   Everything is going well, but you have been asked to add a small and simple piece of functionality to a particular orchestration which, hitherto, has been working properly.   You drop a loop shape into the orchestration and set it up to enumerate some values provided by a custom class.   Disaster.   When you run the orchestration, strange behaviour is observed.   An instance of the orchestration is activated, but then…nothing.   The very first orchestration shape is an expression whose first line is a trace.   This line never gets executed.   Worse than that, the BizTalk process has all but locked up.   The CPU is maxed out at 100% and it takes a couple of minutes of patient waiting to coax the host instance into stopping.   You then find it virtually impossible to get rid of the running orchestration instance.   In fact, there are two service instances involved.  The orchestration’s parent (it is a 'called' orchestration) receives a message via a published web service, and you have to stop the isolated host's IIS app pool in order to terminate the EPM (messaging) service instance associated with the isolated host.   If you try also to suspend or terminate the orchestration service instance, the action is marked as pending.   If you restart the host instance in order to complete the pending action, the process just locks up again.  Because you can't get rid of the active orchestration service instance, you can't redeploy a new version of your BizTalk code.  

Progress slows to a crawl.  In desperation you eventually resort to manually truncating various BizTalk message box tables in order to recover from the lock-up (not a recommended strategy, though very effective).  You can't trace or debug your orchestration code because none of it appears to ever run.   You remove the loop that caused the problem and redeploy, and still you code doesn't work.   Hours start to pass while your blood pressure slowly rises, and your deadlines come and go.  You try everything you can think of, including recreating your orchestration from scratch, testing it carefully at each stage.  Everything is fine until you recreate that darned loop.  Again, BizTalk locks up.

The best thing to do in these situations is to walk away from the problem for a while.   With a little encouragement from the project manager, this is what I did.   The functionality represented by the loop was important, but I could carry on making progress without it for a while.  Progress is duly made, and then, a few hours later, walking down the street after the day's work is done, my mind turns back naturally to the problem…and bingo (as we say here in the UK)…a moment of clarity and enlightenment.   I know in an instant what is wrong.  Next morning, it takes me about a minute to locate and fix the bug.

My loop uses a custom class.   I created a variable at the outer scope of the orchestration to hold an instance of this class.   The default constructor invokes some code that contains a loop.   I had managed to write that loop so that it never hit the 'break' statement.   So obvious.   So basic.   As soon as BizTalk instantiated my orchestration, it ran the code to auto-construct my custom class.  The construction code hit the never-ending loop and everything locked up.

In future, I intend to adopt a new BizTalk coding standard.   I shall rigorously switch off auto-construction for all my orchestration variables, and include explicit code in expression shapes to construct objects.  This kind of bug takes a minute or so to diagnose when using a language like C#.   In BizTalk orchestrations, it becomes opaque and very difficult to find.   Worse than that, BizTalk does not provide sufficient facilities for easy recovery from the worst effects of auto-construction.   This is a feature too far.

SuperBowl XLI

I have to admit I am not a big football fan. However, living and working in Miami, FL is impossible to ignore the energy the city has gotten as a result of hosting the SuperBowl tomorrow.  No need to say South Beach has enough energy without the SuperBowl.

Regarding the game itself; I am going with the Colts so that I can celebrate with my friends Ben and Kirsti Elliot. So happy Super Sunday!!

Team Foundation Server: Source Control Video

I watched a really great Channel 9 video yesterday (filmed by Brian Keller and starring Doug Neumann) about Team Foundation Server source control branching and merging strategies. Doug is the TFS Group Program Manager and does the best overall job explaining TFS source control branching and merging that I’ve seen or read to date. This is a very complex topic but Doug does a great job simplifying the concepts and explaining the pros and cons of each approach. Ever since I started using TFS for source control this area has bugged me and Doug's video goes along way to helping me decide which approach best fits our development efforts. If you're using Team Foundation Server, this video is a real gem!

PS: It's also pretty amazing to see someone as technically "deep" as Doug do so well in front of a camera. Way to go!

Technorati Tags: Team Foundation Server, Visual Studio

Share this post: Email it! | bookmark it! | digg it! | reddit!| kick it!

New in BizTalk 2006

When I do corporate training, I always get asked this question… "So what is new in BizTalk 2006 when compared to BizTalk 2004?" mostly from people who have been using BizTalk 2004. So here I have tried to summarize some of the things. Note this is by no means an exhaustive listing as there are other small but significant improvements.

 

SETUP

Automatic installation of redistributable components.
In BizTalk Server 2006, the BizTalk team provide a single file that contains the latest version of all redistributable components required by BizTalk Server during installation, eliminating the need for users to individually search for the components.

Simplified setup experience for first-time users.
BizTalk Server 2006 includes a significantly simpler installation experience for the developer, single machine user, and the first time user. Selecting to install the product by using the default setting will allow all of the product's components to be installed under a single account on one machine, with minimal need of user input.

Flexible setup experience for advanced users.
In BizTalk Server 2006, the setup experience has been redesigned to provide greater flexibility to support the advanced user tasked with deploying solutions across large server farm. Once installation completes, the custom configurations can be exported and imported to ease the installation of settings across server farms or development build labs.

Seamless upgrade experience.
Upgrading from BizTalk Server 2004 to BizTalk Server 2006 is an in-place upgrade process. When a customer executes the BizTalk Server 2006 setup on a machine where BizTalk Server 2004 is already installed, the setup program will automatically upgrade the installation to BizTalk Server 2006. All solutions built for this earlier version will work unchanged in the new version.

OPERATIONS

Introducing the application concept
 BizTalk Server 2006 formalizes the concept of a BizTalk application by providing a logical container for housing all the artifacts for a given solution. This allows administrators to work with a complete BizTalk application as a unit, greatly simplifying the management, troubleshooting, and deployment of business processes.

Orchestration Zooming
In BizTalk 2004, working with complex orchestrations in the Orchestration Designer sometimes requires a lot of scrolling on the design surface to view different parts of the orchestration. In BizTalk Server 2006, the designer has been enhanced to provide the ability to zoom in and out on an orchestration, allowing a developer to view only those parts of an orchestration of current interest.

Flat File Schema Wizard
The BizTalk Flat File Schema Wizard is designed to simplify the process of creating flat file schemas by providing the following:

  • The ability to use flat file instances as input
  • A visual design surface for working with delimited and positional flat file schemas
  • An interactive wizard-based process for adding elements to the schema and defining flat file related annotations.

Application packaging
Using the BizTalk Administration Console, an administrator can package entire applications into .msi files by just right-clicking on the application and exporting as .msi file. Once packaged, installing these applications to one or more servers is as easy as running / importing the .msi file.

More Powerful Administration Console
In BizTalk Server 2006, all the management functionality is consolidated into the BizTalk Administration Console. Users now have the ability to create artifacts and messaging components by using the console in addition to configuring, deploying, stopping, and starting applications across multiple servers.

Server health monitoring
 Using the BizTalk Administration Console's Group Hub page, an administrator can view at a glance the health of currently running BizTalk applications. Rather than requiring an administrator to search for problems, the Group Hub page uses color-coded indicators to display those problems, allowing the administrators to take a more proactive approach to application monitoring.

ADAPTERS

POP3 Adapter
BizTalk Server 2004 provides support for sending email through the SMTP adapter, however, no out-of-the-box support is provided for receiving email. With the introduction of the POP3 adapter in BizTalk Server 2006, BizTalk Server now supports receiving email messages and their attachments using version three of the Post Office Protocol (POP3) from any POP3 compliant mail server.

Windows SharePoint Services Adapter
BizTalk Server 2006 introduces the Windows SharePoint Services Adapter to provide built-in support for accessing and publishing documents stored in Windows SharePoint Services document libraries. Organizations can now link the Office documents and tools familiar to knowledge workers with the enterprise portal systems that run their businesses.

MQ Series Adapter
 For BizTalk Server 2004 the MQSeries adapter was available as a Web download. In BizTalk Server 2006, the MQSeries support comes built-in. With the MQSeries adapter, organizations can use XML-enabled MQSeries investments, making it possible to more securely and reliably integrate disparate applications

New Line-of-Business Adapters
SAP, PeopleSoft, JD Edwards, ODBC Adapter for Oracle, Siebel, TIBCO, IBM DB2

RUN TIME IMPROVEMENT

Recoverable Interchange
In BizTalk, an Interchange can contain two or more messages, such as a batch. In BizTalk Server 2004, a validation error in any message contained in the interchange will result in

Visual Studio Team Edition for Database Professionals: Schema View Synchronization

Here's a quick tip for those of us using VSTEDP (DataDude) for database development and TFS (Team Foundation Server) for source control.

You may occasionally see a yellow message stating "External file change, resynchronization required…" when you open a large solution, perform a "get latest version (recursive)" and switch to the schema view. I'm assuming this is a normal behavior since the local schema database may be out of sync with the object scripts just downloaded from the TFS server. If I remember correctly, the DataDude team decided not to "resync" automatically since it may take some time to accomplish on a large scale project. Unfortunately, it's not immediately obvious how to do this unless you mouse over the "Synchronize" icon as shown below:

No, this is not a "Refresh" button as the icon suggests, it's a "Synchronize" button and will bring your Solution Explorer view and Schema View into sync! Keeping these two views in sync is critical since the Schema Compare and Data Compare functions use the local schema database and not the SQL script files.

I know the DataDude team talk about the "one version of the truth" in database development but in reality there are two versions, one in the script files and the other in the local schema database. It's important to keep these two versions of the truth in sync!

Technorati Tags: Visual Studio, DataDude, Team Foundation Server

Share this post: Email it! | bookmark it! | digg it! | reddit!| kick it!

Better Integration Analysis…

So…almost three years ago (gulp) I wrote this
article on the use of orchestration naming conventions.  In the post, I described
the value of orchestration diagrams and their use throughout the development cycle. 
In my current engagement, we are doing analysis on the integrations between ERP, warehousing,
front-end commerce systems in multiple channels, and a PIM (Product Information Management)
solution.  I’m finding that the BizTalk designer – used just as a modeling tool
with the constructs that it provides but not filling in deep detail – eliminates so
much
of the ambiguity that a simple Visio can leave on the table.  So I
thought I’d repeat my (now old) thoughts on this topic:

The opportunity exists to use an orchestration diagram in several interesting ways
within a project lifecycle:

  1. As a way to capture an initial high-level design, using all the orchestration shapes
    as intended but not yet bothering with real maps and schemas.  Stubbing out schemas
    (so you can declare messages and variables to be of proper types) and maps will allow
    you to flesh out the orchestration diagram(s) quite a bit, using the compiler as just
    a way to check for consistency.  All of the external system interactions, communication
    patterns, decision points, parallel vs. joined flows, etc. can be represented at this
    point in a shell orchestration.

  2. As a way to gain consensus with the development team & business sponsor about
    whether the right functionality is indeed going to be built.  The high level
    design just described is a great tool for this discussion.  Put your orchestration(s)
    up on a wall with a projector and do a walk-through with as many of the project stakeholders
    as makes sense.  Or use a tool like CutePDF to
    print the orchestration as a PDF to send around via email.

  3. As a way to estimate work.  The various shapes in your initial orchestration
    can often represent reasonable granularity for time estimates.

  4. And finally, as a way to guide project work…Rather than starting with the entire
    orchestration that you created to support steps 1-3, you might find it easier to create
    a new orchestration that represents the path(s) you are tackling at a particular point. 
    You can cut/paste portions of that original orchestration or simply use it as a reference
    for what comes next it serves as your outline.

To help realize some of these benefits, naming conventions within an orchestration
are quite important

While the naming conventions are good practice for variables, Messages, Multi-Part
types, etc. they are even more import for the workflow shapes.  The goal is to
ensure that the intent of each shape is clear, and that the text associated with the
shape conveys as much as possible given the space constraints.  Make liberal
use of group shapes where needed.  In this way, a non-technical audience will
be able to use the orchestration as documentation.